参考
https://log4js-node.github.io/log4js-node/index.html
API
- 在载入 log4js 模块后需要马上配置该模块,否则 log4js 会引用默认配置或者 LOG4JS_CONFIG (如果已经定义) -- 参考(https://blog.csdn.net/wonder233/article/details/80738658)
- Config 字段: levels appenders categories pm2 pm2InstanceVar disableClustering
- levels
- 默认优先级 ALL(Number.MIN_VALUE) < TRACE(5000) < DEBUG(10000) < INFO(20000) < WARN(30000) < ERROR(40000) < FATAL(50000) < MARK(9007199254740992) < OFF(Number.MAX_VALUE)
- OFF 不是日志等级,调用 logger.off('...') 将会关闭日志功能
- 默认优先级可以更改
- node_modules/log4js/lib/levels.js 中有默认优先级的颜色范围,优先级整数(数字越小等级越低),
- { ..., LevelsName: { value: 1234, colour: 'yellow' }, ...}
- 可选颜色: 'white', 'grey', 'black','blue', 'cyan', 'green','magenta', 'red', 'yellow'
- 颜色自定义在:node_modules/log4js/lib/layouts.js : const styles = { ... }
- appenders
- 定义插件的参数到插件实例,将会指定引用的插件类型(type),插件的参数(除开 type 字段,其他字段都会传入插件模块,具体的字段名称需要查看插件内部实现)
- 参考: https://log4js-node.github.io/log4js-node/appenders.html
- Core appender Type: categoryFilter console dateFile file fileSync logLevelFilter multiFile multiprocess recording stderr stdout tcp tcp-server
- Optional appender Type: gelf hipchat logFaces-HTTP logFaces-UDP loggly logstashHTTP logstashUDP mailgun rabbitmq redis slack smtp
- 当 type 字段的值没在上叙范围内,则将会夹在 type 字段指向的目标目录的模块,如果自己要写插件,则可先参考 https://log4js-node.github.io/log4js-node/writing-appenders.html
- categories
- 定义将哪些日志类型的 log 输出到哪些插件
- default 一定要配置的,这是所有的 log 都会输出到此类
- 可以配置输出源(appender),输出等级 level, 是否现实调用栈的状态(enableCallStack -- 显示文件名,行号)
- 格式 default: { appenders: [ 'out', 'app' ], level: 'debug' }
- pm2
- 如果你使用了 pm2,一定要 enable 此选项
- 而且一定要安装 pm2 install pm2-intercom
- pm2InstanceVar
- 默认 NODE_APP_INSTANCE
- 如果您正在使用pm2并更改了NODE_APP_INSTANCE变量的默认名称,请设置此项。
- disableClustering
- set this to true if you liked the way log4js used to just ignore clustered environments, or you’re having trouble with PM2 logging.
- Each worker process will do its own logging. Be careful with this if you’re logging to files, weirdness can occur.
- levels
- Loggers API
- 打印 log :
( ... ) 如:debug( 'print some logs' ) - 查看 level 等级的 log 是否打开 is
Enable() - addContext( key, value ) 添加一个键值对,将会出现在所有 log 中,目前只有 logFaces 插件支持
- removeContext( key ): addContext 的 anti-action
- clearContext: remove all addContext
- level:打印等级(将会覆盖所有 appender 中的)
- 打印 log :
- shutdown
- addLayout
插件 API
- file
- 三种 file( File Appender ), dateFile( Date Rolling File Appender ), fileSync( Synchronous File Appender )
- File Appender 与 Synchronous File Appender 的区别在于
- 记录日志的方法:dateFile 根据时间来轮询,file 和 filesync 根据文件大小来轮询
- file(sync) 的参数:filename, maxLogSize, backups, layout, ( next params will passed to underlying nodejs core stream implementation ) encoding(default “utf-8”), mode- integer (default 0644), flags - string (default ‘a’)
- datafile 的参数: filename, pattern, layout, ( next params will passed to underlying nodejs core stream implementation ), encoding, mode, flags, compress( true/false 是否压缩备份 ), alwaysIncludePattern( true/false 在日志文件名称中是否包含 pattern ), daysToKeep( 滚动天数限制 ), keepFileExt( 滚动保存时候保留文件扩展名称 )
- ...