| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- --- 模块功能:系统日志记录,分级别日志工具
- -- @module log
- -- @author openLuat
- -- @license MIT
- -- @copyright openLuat
- -- @release 2017.09.26
- module(..., package.seeall)
- -- 定义日志级别常量,可在main入口全局指定
- -- 例如: LOG_LEVEL=log.LOGLEVEL_WARN
- LOG_SILENT = 0x00;
- LOGLEVEL_TRACE = 0x01;
- LOGLEVEL_DEBUG = 0x02;
- LOGLEVEL_INFO = 0x03;
- LOGLEVEL_WARN = 0x04;
- LOGLEVEL_ERROR = 0x05;
- LOGLEVEL_FATAL = 0x06;
- -- 定义日志级别标签,分别对应日志级别的1-6
- local LEVEL_TAG = {'T', 'D', 'I', 'W', 'E', 'F'}
- local PREFIX_FMT = "[%s]-[%s]"
- --- 内部函数,支持不同级别的log打印及判断
- -- @param level 日志级别,可选LOGLEVEL_TRACE,LOGLEVEL_DEBUG等
- -- @param tag 模块或功能名称(标签),作为日志前缀
- -- @param ... 日志内容,可变参数
- -- @return nil
- -- @usage _log(LOGLEVEL_TRACE,tag, 'log content')
- -- @usage _log(LOGLEVEL_DEBUG,tag, 'log content')
- local function _log(level, tag, ...)
- -- INFO 作为默认日志级别
- local OPENLEVEL = LOG_LEVEL and LOG_LEVEL or LOGLEVEL_INFO
- -- 如果日志级别为静默,或设定级别更高,则不输出日志
- if OPENLEVEL == LOG_SILENT or OPENLEVEL > level then return end
- -- 日志打印输出
- local prefix = string.format(PREFIX_FMT, LEVEL_TAG[level], type(tag)=="string" and tag or "")
- print(prefix, ...)
- -- TODO,支持hookup,例如对某级别日志做额外处理
- -- TODO,支持标签过滤
- end
- --- 输出trace级别的日志
- -- @param tag 模块或功能名称,作为日志前缀
- -- @param ... 日志内容,可变参数
- -- @return nil
- -- @usage log.trace('moduleA', 'log content')
- function trace(tag, ...)
- _log(LOGLEVEL_TRACE, tag, ...)
- end
- --- 输出debug级别的日志
- -- @param tag 模块或功能名称,作为日志前缀
- -- @param ... 日志内容,可变参数
- -- @return nil
- -- @usage log.debug('moduleA', 'log content')
- function debug(tag, ...)
- _log(LOGLEVEL_DEBUG, tag, ...)
- end
- --- 输出info级别的日志
- -- @param tag 模块或功能名称,作为日志前缀
- -- @param ... 日志内容,可变参数
- -- @return nil
- -- @usage log.info('moduleA', 'log content')
- function info(tag, ...)
- _log(LOGLEVEL_INFO, tag, ...)
- end
- --- 输出warn级别的日志
- -- @param tag 模块或功能名称,作为日志前缀
- -- @param ... 日志内容,可变参数
- -- @return nil
- -- @usage log.warn('moduleA', 'log content')
- function warn(tag, ...)
- _log(LOGLEVEL_WARN, tag, ...)
- end
- --- 输出error级别的日志
- -- @param tag 模块或功能名称,作为日志前缀
- -- @param ... 日志内容,可变参数
- -- @return nil
- -- @usage log.error('moduleA', 'log content')
- function error(tag, ...)
- _log(LOGLEVEL_ERROR, tag, ...)
- end
- --- 输出fatal级别的日志
- -- @param tag 模块或功能名称,作为日志前缀
- -- @param ... 日志内容,可变参数
- -- @return nil
- -- @usage log.fatal('moduleA', 'log content')
- function fatal(tag, ...)
- _log(LOGLEVEL_FATAL, tag, ...)
- end
- --- 开启或者关闭print的打印输出功能
- -- @bool v false或nil为关闭,其余为开启
- -- @param uartid 输出Luatrace的端口:1表示uart1,2表示uart2
- -- @return nil
- -- @usage log.openTrace(1,nil)
- function openTrace(v, uartid, baudrate)
- if uartid then
- if v then
- uart.setup(uartid, baudrate or 115200, 8, uart.PAR_NONE, uart.STOP_1)
- else
- uart.close(uartid)
- end
- end
- rtos.set_trace(v and 1 or 0, uartid)
- end
|