--- 模块功能:系统日志记录,分级别日志工具 -- @module log -- @author openLuat -- @license MIT -- @copyright openLuat -- @release 2017.09.26 module(..., package.seeall) local u_log = require "ubuslog.core" -- 定义日志级别常量,可在main入口全局指定 -- 例如: LOG_LEVEL=log.LOGLEVEL_WARN LOG_SILENT = 0x00; LOGLEVEL_TRACE = u_log.LOG_DEBUG; LOGLEVEL_DEBUG = u_log.LOG_DEBUG; LOGLEVEL_INFO = u_log.LOG_INFO; LOGLEVEL_NOTICE = u_log.LOG_NOTICE; LOGLEVEL_WARN = u_log.LOG_WARNING; LOGLEVEL_ERROR = u_log.LOG_ERR; LOGLEVEL_FATAL = u_log.LOG_EMERG; -- 定义日志级别标签,分别对应日志级别的1-6 local LEVEL_TAG = {'T', 'D', 'I', 'W', 'E', 'F'} local PREFIX_FMT = "[%s]-[%s]" -- 映射syslog 和 luat log的关系,index 是syslog level,value是 luat level local SYSLOG_REMAP={ LOG_SILENT, LOGLEVEL_FATAL, LOGLEVEL_FATAL, LOGLEVEL_ERROR, LOGLEVEL_WARN, LOGLEVEL_INFO, LOGLEVEL_DEBUG, LOGLEVEL_TRACE} local _debug = debug --- 内部函数,支持不同级别的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, ...) if tag == nil then tag = "nil" end ubus_log(level,tag,...) end function ubus_log(level,...) local argc = 0 local args = {} for _, argv in ipairs{...} do local typn = type(argv) if typn ~= "string" then argv = tostring(argv) typn = type(argv) end if typn == "string" then argc = argc + 1 args[argc] = argv end end if argc == 0 then io.stderr:write("Error, no string argument given to ubuslog.log(...)\n") io.stderr:flush() return false end return u_log.log(level, unpack(args)) end --- 输出trace级别的日志 -- @param tag ,模块或功能名称,作为日志前缀 -- @param ... ,日志内容,可变参数 -- @return nil -- @usage trace('moduleA', 'log content') function trace(tag, ...) _log(u_log.LOG_DEBUG, tag, ...) end --- 输出debug级别的日志 -- @param tag ,模块或功能名称,作为日志前缀 -- @param ... ,日志内容,可变参数 -- @return nil -- @usage debug('moduleA', 'log content') function debug(tag, ...) _log(u_log.LOG_DEBUG, tag, ...) end --- 输出info级别的日志 -- @param tag ,模块或功能名称,作为日志前缀 -- @param ... ,日志内容,可变参数 -- @return nil -- @usage info('moduleA', 'log content') function info(tag, ...) _log(u_log.LOG_INFO, tag, ...) end --- 输出notice级别的日志 -- @param tag ,模块或功能名称,作为日志前缀 -- @param ... ,日志内容,可变参数 -- @return nil -- @usage info('moduleA', 'log content') function notice(tag, ...) _log(u_log.LOG_NOTICE, tag, ...) end --- 输出warn级别的日志 -- @param tag ,模块或功能名称,作为日志前缀 -- @param ... ,日志内容,可变参数 -- @return nil -- @usage warn('moduleA', 'log content') function warn(tag, ...) _log(u_log.LOG_WARNING, tag, ...) end --- 输出error级别的日志 -- @param tag ,模块或功能名称,作为日志前缀 -- @param ... ,日志内容,可变参数 -- @return nil -- @usage error('moduleA', 'log content') function error(tag, ...) _log(u_log.LOG_ERR, tag, ...) end --- 输出fatal级别的日志 -- @param tag ,模块或功能名称,作为日志前缀 -- @param ... ,日志内容,可变参数 -- @return nil -- @usage fatal('moduleA', 'log content') function fatal(tag, ...) _log(u_log.LOG_EMERG, tag, ...) end -- log进程名称设置 和日志等级设置 function init(name,level) u_log.reinit(name) u_log.loglevel_set(level) end --- 开启或者关闭print的打印输出功能 -- @bool v:false或nil为关闭,其余为开启 -- @param uartid:输出Luatrace的端口:nil表示host口,1表示uart1,2表示uart2 -- @number baudrate:number类型,uartid不为nil时,此参数才有意义,表示波特率,默认115200 \ -- 支持1200,2400,4800,9600,10400,14400,19200,28800,38400,57600,76800,115200,230400,460800,576000,921600,1152000,4000000 -- @return nil -- @usage sys.openTrace(1,nil,921600) 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