luat_lib_log.c 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /*
  2. @module log
  3. @summary 日志库
  4. @version 1.0
  5. @date 2020.03.30
  6. */
  7. #include "luat_base.h"
  8. #include "luat_log.h"
  9. #include "luat_sys.h"
  10. #include "luat_msgbus.h"
  11. /*
  12. 设置日志级别
  13. @api log.setLevel(level)
  14. @string level 日志级别,可用字符串或数值, 字符串为(SILENT,DEBUG,INFO,WARN,ERROR,FATAL), 数值为(0,1,2,3,4,5)
  15. @return nil 无返回值
  16. @usage
  17. -- 设置日志级别为INFO
  18. log.setLevel("INFO")
  19. */
  20. static int l_log_set_level(lua_State *L) {
  21. int LOG_LEVEL = 0;
  22. if (lua_isinteger(L, 1)) {
  23. LOG_LEVEL = lua_tointeger(L, 1);
  24. }
  25. else if (lua_isstring(L, 1)) {
  26. const char* lv = lua_tostring(L, 1);
  27. if (strcmp("SILENT", lv) == 0) {
  28. LOG_LEVEL = LUAT_LOG_CLOSE;
  29. }
  30. else if (strcmp("DEBUG", lv) == 0) {
  31. LOG_LEVEL = LUAT_LOG_DEBUG;
  32. }
  33. else if (strcmp("INFO", lv) == 0) {
  34. LOG_LEVEL = LUAT_LOG_INFO;
  35. }
  36. else if (strcmp("WARN", lv) == 0) {
  37. LOG_LEVEL = LUAT_LOG_WARN;
  38. }
  39. else if (strcmp("ERROR", lv) == 0) {
  40. LOG_LEVEL = LUAT_LOG_ERROR;
  41. }
  42. }
  43. if (LOG_LEVEL == 0) {
  44. LOG_LEVEL = LUAT_LOG_CLOSE;
  45. }
  46. luat_log_set_level(LOG_LEVEL);
  47. return 0;
  48. }
  49. /*
  50. 获取日志级别
  51. @api log.getLevel()
  52. @return int 日志级别对应0,1,2,3,4,5
  53. @usage
  54. -- 得到日志级别
  55. log.getLevel()
  56. */
  57. int l_log_get_level(lua_State *L) {
  58. lua_pushinteger(L, luat_log_get_level());
  59. return 1;
  60. }
  61. static int l_log_2_log(lua_State *L) {
  62. // 是不是什么都不传呀?
  63. int argc = lua_gettop(L);
  64. if (argc < 2) {
  65. // 最起码传2个参数
  66. return 0;
  67. }
  68. lua_getglobal(L, "print");
  69. lua_insert(L, 1);
  70. lua_pushfstring(L, "%s/user.%s", lua_tostring(L, 2), lua_tostring(L, 3));
  71. lua_remove(L, 2); // remove level
  72. lua_remove(L, 2); // remove tag
  73. lua_insert(L, 2);
  74. lua_call(L, argc - 1, 0);
  75. return 0;
  76. }
  77. /*
  78. 输出日志,级别debug
  79. @api log.debug(tag, val, val2, val3, ...)
  80. @string tag 日志标识,必须是字符串
  81. @... 需打印的参数
  82. @return nil 无返回值
  83. @usage
  84. -- 日志输出 D/onenet connect ok
  85. log.debug("onenet", "connect ok")
  86. */
  87. static int l_log_debug(lua_State *L) {
  88. if (luat_log_get_level() > LUAT_LOG_DEBUG) return 0;
  89. lua_pushstring(L, "D");
  90. lua_insert(L, 1);
  91. return l_log_2_log(L);
  92. }
  93. /*
  94. 输出日志,级别info
  95. @api log.info(tag, val, val2, val3, ...)
  96. @string tag 日志标识,必须是字符串
  97. @... 需打印的参数
  98. @return nil 无返回值
  99. @usage
  100. -- 日志输出 I/onenet connect ok
  101. log.info("onenet", "connect ok")
  102. */
  103. static int l_log_info(lua_State *L) {
  104. if (luat_log_get_level() > LUAT_LOG_INFO) return 0;
  105. lua_pushstring(L,"I");
  106. lua_insert(L, 1);
  107. return l_log_2_log(L);
  108. }
  109. /*
  110. 输出日志,级别warn
  111. @api log.warn(tag, val, val2, val3, ...)
  112. @string tag 日志标识,必须是字符串
  113. @... 需打印的参数
  114. @return nil 无返回值
  115. @usage
  116. -- 日志输出 W/onenet connect ok
  117. log.warn("onenet", "connect ok")
  118. */
  119. static int l_log_warn(lua_State *L) {
  120. if (luat_log_get_level() > LUAT_LOG_WARN) return 0;
  121. lua_pushstring(L, "W");
  122. lua_insert(L, 1);
  123. return l_log_2_log(L);
  124. }
  125. /*
  126. 输出日志,级别error
  127. @api log.error(tag, val, val2, val3, ...)
  128. @string tag 日志标识,必须是字符串
  129. @... 需打印的参数
  130. @return nil 无返回值
  131. @usage
  132. -- 日志输出 E/onenet connect ok
  133. log.error("onenet", "connect ok")
  134. */
  135. static int l_log_error(lua_State *L) {
  136. if (luat_log_get_level() > LUAT_LOG_ERROR) return 0;
  137. lua_pushstring(L, "E");
  138. lua_insert(L, 1);
  139. return l_log_2_log(L);
  140. }
  141. #include "rotable.h"
  142. static const rotable_Reg reg_log[] =
  143. {
  144. { "setLevel" , l_log_set_level, 0},
  145. { "getLevel" , l_log_get_level, 0},
  146. { "debug" , l_log_debug, 0},
  147. { "info" , l_log_info, 0},
  148. { "warn" , l_log_warn, 0},
  149. { "error" , l_log_error, 0},
  150. { "fatal" , l_log_error, 0}, // 以error对待
  151. { "_log" , l_log_2_log, 0},
  152. { "LOG_SILENT", NULL, LUAT_LOG_CLOSE},
  153. { "LOG_DEBUG", NULL, LUAT_LOG_DEBUG},
  154. { "LOG_INFO", NULL, LUAT_LOG_INFO},
  155. { "LOG_WARN", NULL, LUAT_LOG_WARN},
  156. { "LOG_ERROR", NULL, LUAT_LOG_ERROR},
  157. { NULL, NULL }
  158. };
  159. LUAMOD_API int luaopen_log( lua_State *L ) {
  160. luat_newlib(L, reg_log);
  161. return 1;
  162. }