log.lua 3.8 KB

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