log.lua 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. --- 模块功能:系统日志记录,分级别日志工具
  2. -- @module log
  3. -- @author openLuat
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2017.09.26
  7. module(..., package.seeall)
  8. -- 定义日志级别常量,可在main入口全局指定
  9. -- 例如: LOG_LEVEL=log.LOGLEVEL_WARN
  10. LOG_SILENT = 0x00;
  11. LOGLEVEL_TRACE = 0x01;
  12. LOGLEVEL_DEBUG = 0x02;
  13. LOGLEVEL_INFO = 0x03;
  14. LOGLEVEL_WARN = 0x04;
  15. LOGLEVEL_ERROR = 0x05;
  16. LOGLEVEL_FATAL = 0x06;
  17. -- 定义日志级别标签,分别对应日志级别的1-6
  18. local LEVEL_TAG = {'T', 'D', 'I', 'W', 'E', 'F'}
  19. local PREFIX_FMT = "[%s]-[%s]"
  20. --- 内部函数,支持不同级别的log打印及判断
  21. -- @param level 日志级别,可选LOGLEVEL_TRACE,LOGLEVEL_DEBUG等
  22. -- @param tag 模块或功能名称(标签),作为日志前缀
  23. -- @param ... 日志内容,可变参数
  24. -- @return nil
  25. -- @usage _log(LOGLEVEL_TRACE,tag, 'log content')
  26. -- @usage _log(LOGLEVEL_DEBUG,tag, 'log content')
  27. local function _log(level, tag, ...)
  28. -- INFO 作为默认日志级别
  29. local OPENLEVEL = LOG_LEVEL and LOG_LEVEL or LOGLEVEL_INFO
  30. -- 如果日志级别为静默,或设定级别更高,则不输出日志
  31. if OPENLEVEL == LOG_SILENT or OPENLEVEL > level then return end
  32. -- 日志打印输出
  33. local prefix = string.format(PREFIX_FMT, LEVEL_TAG[level], type(tag)=="string" and tag or "")
  34. print(prefix, ...)
  35. -- TODO,支持hookup,例如对某级别日志做额外处理
  36. -- TODO,支持标签过滤
  37. end
  38. --- 输出trace级别的日志
  39. -- @param tag 模块或功能名称,作为日志前缀
  40. -- @param ... 日志内容,可变参数
  41. -- @return nil
  42. -- @usage log.trace('moduleA', 'log content')
  43. function trace(tag, ...)
  44. _log(LOGLEVEL_TRACE, tag, ...)
  45. end
  46. --- 输出debug级别的日志
  47. -- @param tag 模块或功能名称,作为日志前缀
  48. -- @param ... 日志内容,可变参数
  49. -- @return nil
  50. -- @usage log.debug('moduleA', 'log content')
  51. function debug(tag, ...)
  52. _log(LOGLEVEL_DEBUG, tag, ...)
  53. end
  54. --- 输出info级别的日志
  55. -- @param tag 模块或功能名称,作为日志前缀
  56. -- @param ... 日志内容,可变参数
  57. -- @return nil
  58. -- @usage log.info('moduleA', 'log content')
  59. function info(tag, ...)
  60. _log(LOGLEVEL_INFO, tag, ...)
  61. end
  62. --- 输出warn级别的日志
  63. -- @param tag 模块或功能名称,作为日志前缀
  64. -- @param ... 日志内容,可变参数
  65. -- @return nil
  66. -- @usage log.warn('moduleA', 'log content')
  67. function warn(tag, ...)
  68. _log(LOGLEVEL_WARN, tag, ...)
  69. end
  70. --- 输出error级别的日志
  71. -- @param tag 模块或功能名称,作为日志前缀
  72. -- @param ... 日志内容,可变参数
  73. -- @return nil
  74. -- @usage log.error('moduleA', 'log content')
  75. function error(tag, ...)
  76. _log(LOGLEVEL_ERROR, tag, ...)
  77. end
  78. --- 输出fatal级别的日志
  79. -- @param tag 模块或功能名称,作为日志前缀
  80. -- @param ... 日志内容,可变参数
  81. -- @return nil
  82. -- @usage log.fatal('moduleA', 'log content')
  83. function fatal(tag, ...)
  84. _log(LOGLEVEL_FATAL, tag, ...)
  85. end
  86. --- 开启或者关闭print的打印输出功能
  87. -- @bool v false或nil为关闭,其余为开启
  88. -- @param uartid 输出Luatrace的端口:1表示uart1,2表示uart2
  89. -- @return nil
  90. -- @usage log.openTrace(1,nil)
  91. function openTrace(v, uartid, baudrate)
  92. if uartid then
  93. if v then
  94. uart.setup(uartid, baudrate or 115200, 8, uart.PAR_NONE, uart.STOP_1)
  95. else
  96. uart.close(uartid)
  97. end
  98. end
  99. rtos.set_trace(v and 1 or 0, uartid)
  100. end