介绍
版本号:2.3.8
Level 日志分级
日志的分级。不同级别的日志在控制台中采用不同的颜色。 log4js 的日志分为九个等级,各个级别的名字和权重如下:
{
ALL: new Level(Number.MIN_VALUE, "ALL"),
TRACE: new Level(5000, "TRACE"),
DEBUG: new Level(10000, "DEBUG"),
INFO: new Level(20000, "INFO"),
WARN: new Level(30000, "WARN"),
ERROR: new Level(40000, "ERROR"),
FATAL: new Level(50000, "FATAL"),
MARK: new Level(9007199254740992, "MARK"), // 2^53
OFF: new Level(Number.MAX_VALUE, "OFF")
}
Category 日志分类
通过 getLogger 获取 Logger 实例时,唯一的参数 loggerCategoryName
表明 Logger 属于哪个分类。如果没有匹配 categories
中定义的则使用 default
配置
log4js.getLogger('test1').debug('调试信息!')
log4js.getLogger('test').debug('调试信息!')
// test1 和 test 在categories 中没有定义,所以有以下信息
// [2017-10-24 16:43:17.980] [DEBUG] test1 - 提示信息!
// [2017-10-24 16:43:17.980] [DEBUG] test - 提示信息!
Appender 日志输出
定义日志以何种方式输出。 如果输出级别是 info,则不会打印出低于 info 级别的日志 trace,debug,只打印info,warn,error,fatal。 log4js定义了如下的输出格式:
- Clustered
- Console
- DateFile
- DateFileSync
- File
- GELF
- hook.io
- logFaces
- Loggly
- Mailgun
- Multiprocess
- SMTP
完整示例:
const log4js = require('log4js')
log4js.configure({
appenders: {
console: {
type: 'console' // 控制台输出
},
file: {
type: 'File', // 文件输出
filename: 'logs/log.txt', // 文件路径
backups: 4, // 日志备份数量,大于该数则自动删除
maxLogSize: 1024 // 文件大小,1KB
},
info: {
type: 'dateFile', // 日期文件输出
filename: 'logs/info', // 日志路径/需要手动创建
pattern: '.yyyy-MM-dd.log', // 日志文件命名格式
alwaysIncludePattern: true // 日志是否包含命名格式
},
error: {
type: 'dateFile',
filename: 'logs/error',
pattern: '_yyyy-MM-dd.log',
alwaysIncludePattern: true
}
},
categories: {
default: { appenders: ['console'], level: 'all' },
info: { appenders: ['console', 'info'], level: 'info' },
error: { appenders: ['console', 'error'], level: 'error' }
}
})
const infoLog = log4js.getLogger('info')
const errorLog = log4js.getLogger('error')
infoLog.info('Info Level!')
infoLog.warn('Warn Level!')
errorLog.error('Error Level!')
errorLog.fatal('Fatal Level!')
/*
* error_2017-10-25.log
* [2017-10-25 17:51:41.381] [ERROR] error - Error Level!
* [2017-10-25 17:51:41.381] [FATAL] error - Fatal Level!
*
* info.2017-10-25.log
* [2017-10-25 17:51:41.376] [INFO] info - Info Level!
* [2017-10-25 17:51:41.380] [WARN] info - Warn Level!
* log.txt
*/
express 框架集成
在 app.js 中加入以下代码:
var log4js = require('./logger');
log4js.use(app);
在 index.js 中使用 logger 输出
var logger = require('../logger').logger('index');
/* GET home page. */
router.get('/', function (req, res, next) {
console.log('This is an index page!');
logger.info('This is an index page! -- log4js');
res.render('index', {title: 'Express'});
});
File Appender
日志写入到一个文件。支持可选的文件大小和备份数。
当应用程序关闭时使用 log4js.shutdown
确保剩余日志写入
配置
type
-file
filename
日志文件路径maxLogSize
日志文件最大容量。单位为bytes
。当输出的日志容量大于该数后会覆盖原有日志写入。backups
最大备份日志数,默认 5layout
see layouts
其他配置参数将被传递给 streamroller (参见Node.js核心文件):
encoding
输出流编码。默认 utf-8mode
输出流模式。默认 0644flags
默认 acompress
压缩备份文件。默认 false
示例:
log4js.configure({
appenders: {
everything: { type: 'file', filename: 'all-the-logs.log' }
},
categories: {
default: { appenders: [ 'everything' ], level: 'debug' }
}
});
const logger = log4js.getLogger();
logger.debug('I will be logged in all-the-logs.log');
此示例将生成包含日志消息的单个日志文件(所有日志)。
压缩备份
log4js.configure({
appenders: {
everything: { type: 'file', filename: 'all-the-logs.log', maxLogSize: 10485760, backups: 3, compress: true }
},
categories: {
default: { appenders: [ 'everything' ], level: 'debug'}
}
});
当达日志达到10MB大小,它将会被压缩到all-the-logs.log.1.gz
和新的文件all-the-logs.log
。
当all-the-logs.log
再次达到10MB时,all-the-logs.log.1.gz
将更名为all-the-logs.log.2.gz
,依此类推。
DateFile Appender
基于时间的日志文件。
当应用程序关闭时使用 log4js.shutdown
确保剩余日志写入
配置
type
-dateFile
filename
日志文件夹 也可以为 日志文件路径pattern
日志文件格式,默认.yyyy-MM-dd
,可选。yyyy-MM-dd hh/mm/ss.SSS O(年-月-日 时/分/秒.毫秒 时区)layout
布局,默认basic layout,更多的查看 layouts
其他配置参数将被传递给 streamroller (参见Node.js核心文件):
encoding
输出流编码。默认 utf-8mode
输出流模式。默认 0644flags
默认 acompress
压缩备份文件。默认 falsealwaysIncludePattern
日志文件命令是否包含pattern
, 默认 false。当filename
为 日志文件路径, 该项无效;filename
为日志文件夹, 该项必须为 true,否则出错daysToKeep
如果该值大于零,则删除大于该天数的文件。默认0
逐日存储和备份
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.2017-04-30,等
逐时存储和压缩备份
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.2017-04-30-08.gz 等的压缩文件
Redis Appender
日志存储到Redis数据库。需要 Redis 依赖包支持。
配置
type
-redis
host
Redis数据库地址,默认127.0.0.1
。可选port
Redis数据库端口,默认6379
。可选pass
连接密码。可选channel
订阅频道,日志被发布到指定的订阅频道layout
布局,默认为 basicLayout 查看 layouts。可选
示例:
log4js.configure({
appenders: {
redis: { type: 'redis', channel: 'logs' }
},
categories: { default: { appenders: ['redis'], level: 'info' } }
});
SMTP Appender
电子邮件发送日志。需要 nodemailer 依赖包支持。
当应用程序关闭时调用 log4js.shutdown
命令,将剩余的邮件发送出去
配置
type
-smtp
SMTP
发送方邮件服务配置, 不存在使用transport
字段host
邮件服务器地址,默认localhost
port
端口,可选,默认25
auth
认证,可选user
pass
transport
发送方邮件服务配置,不存在使用SMTP
字段,可选。查看 nodemailer 文档的 transport 选项plugin
邮件服务,默认smtp
options
配置项
attachment
将日志作为电子邮件附件发送,可选enable
是否启用,默认false
message
邮件正文,默认See logs as attachment
filename
附件文件名,默认default.log
sendInterval
邮件发送的间隔时间, 默认0
,如果为 0 则每个日志消息都会发送一封电子邮件,可选shutdownTimeout
关闭过程中等待邮件发送的时间,默认5
, 可选recipients
收件人subject
邮件主题,默认为批量日志中第一个日志的的内容,可选sender
发件人,发件人必须同smtp.auth.user
相同,否则出错html
电子邮件作为HTML发送,而不是以纯文本形式发送,默认false
,可选layout
布局,默认为 basicLayout 查看 layouts,可选
示例:
log4js.configure({
appenders: {
email: {type: 'smtp', recipients: 'dev.team@company.name'}
},
categories: { default: { appenders: [ 'email' ], level: 'error' } }
});
运行在本地的SMTP服务器发送电子邮件
日志作为附件
log4js.configure({
appenders: {
email: {
type: 'smtp',
recipients: 'dev.team@company.name',
subject: 'Latest logs',
sender: 'my.application@company.name',
attachments: {
enable: true,
filename: 'latest.log',
message: 'See the attachment for the latest logs'
},
sendInterval: 3600
}
},
categories: { default: { appenders: ['email'], level: 'ERROR' } }
});
每隔一小时发送一次电子邮件,日志作为附件。
自定义 SMTP host
log4js.configure({
appenders: {
email: {
type: 'smtp',
smtp: {
host: 'smtp.qq.com',
auth: {user: '****@qq.com', pass: '*****'}
},
// 也可以使用下面的配置
// transport: {
// plugin: 'smtp',
// options: {
// host: 'smtp.qq.com',
// port: 465,
// auth: {user: '****@qq.com', pass: '*****'}
// }
// },
recipients: '*****@163.com',
subject: '邮件标题',
sender: '****@qq.com'
}
},
categories: { default: { appenders: ['email'], level: 'info' } }
});