Log4js - Appenders
appender 将日志事件序列化为某种形式的输出。可以写文件,发送电子邮件,通过网络发送数据。所有的 appender 都有一个 type 来决定哪个 appender 被使用。
例如:
const log4js = require('log4js');
log4js.configure({
appenders: {
out: { type: 'stdout' },
app: { type: 'file', filename: 'application.log' }
},
categories: {
default: { appenders: [ 'out', 'app' ], level: 'debug' }
}
});
上面代码定义了两个 appender,一个叫out
,一个叫app
。out
使用 stdout appender 来编写标准输出。app
使用 file appender 将日志写进 application.log 文件中。
Core Appenders
下面的 appender 都是 log4js 支持的。
- categoryFilter
- console
- dateFile
- file
- fileSync
- logFaces-HTTP
- logFaces-UDP
- logLevelFilter
- logstashHTTP
- multiFile
- multiprocess
- recording
- stderr
- stdout
- rabbitmq
有些需要额外的依赖项,而这些依赖项并不包含在log4js中(例如,smtp appender 需要 nodemailer),这些将在appender的文档中注明。
dateFile / Date Rolling File Appender (日期滚动文件 appender)
这是一个 file appender,它基于一个可配置的时间来滚动日志文件。若使用 date file appender ,必须调用log4js.shutdown
来确保应用程序终止时剩余异步写是完成的。date file appender 使用 streamroller 库,但该库是 log4js 的一个依赖项,所以不需要自己包含它。
Configuration
- type -
"dateFile"
- filename -
string
- 要写入日志的文件路径 - pattern -
string (可选, 默认模式为 .yyyy-MM-dd)
- 当前日志文件被重命名并且创建了一个新的日志文件时,pattern
用来决定重命名后的文件名格式。例如,假设当前要写入日志的文件叫 cheese.log,使用默认pattern
:.yyyy-MM-dd
,则一开始会创建一个日志文件名为 cheese.log,到第二天 cheese.log 会被重命名为 cheese.log.2017-04-30 并且一个新的日志文件名为 cheese.log 又会被创建。
- appender 使用 date-format 库来解析
pattern
- 另外要注意,没有计时器控制日志滚动,模式的变化是在每一个日志写入中确定的。如果没有写操作,就不会发生日志滚动。如果您的应用程序不频繁地记录,那么就可能导致在特定的时间段内没有写入日志文件。
- appender 使用 date-format 库来解析
- layout -
(可选, 默认为基础布局)
- 布局
其他的配置参数将会传递给底层 streamroller 实现:
- encoding -
string (默认为“utf-8”)
- mode-
integer (默认为 0644)
- flags -
string (默认为 ‘a’)
- compress -
boolean (默认为 false)
- 在滚动期间压缩备份文件(备份文件将具有.gz扩展名) - alwaysIncludePattern -
boolean (默认为 false)
- 在当前日志文件的名称和备份中包含模式。 - daysToKeep -
integer (默认为 0)
- 如果这个值大于零,那么在日志滚动期间,将会删除超过这段时间的文件。 - keepFileExt -
boolean (默认为 false)
- 在改变日志文件名时保留文件扩展名 (file.log 将会被改名为 file.2018-06-20.log 而不是 file.log.2018-06-20)
例子 (默认日志按天滚动)
log4js.configure({
appenders: {
everything: { type: 'dateFile', filename: 'all-the-logs.log' }
},
categories: {
default: { appenders: [ 'everything' ], level: 'debug' }
}
});
上面这个样例将会按天生成日志记录文件。初始文件为 all-the-logs.log,过一天后文件会被重命名为 all-the-logs.log.2018-06-20。
例子(日志按小时滚动并且进行压缩备份)
log4js.configure({
appenders: {
everything: { type: 'dateFile', filename: 'all-the-logs.log', pattern: '.yyyy-MM-dd-hh', compress: true }
},
categories: {
default: { appenders: [ 'everything' ], level: 'debug'}
}
});
初始文件为 all-the-logs.log,这个文件每小时都会被压缩并且被重命名为 all-the-logs.log.2018-06-20-10.gz,并且会重新生成一个文件 all-the-logs.log。