介绍
版本号: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-filefilename日志文件路径maxLogSize日志文件最大容量。单位为bytes。当输出的日志容量大于该数后会覆盖原有日志写入。backups最大备份日志数,默认 5layoutsee 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-dateFilefilename日志文件夹 也可以为 日志文件路径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-redishostRedis数据库地址,默认127.0.0.1。可选portRedis数据库端口,默认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-smtpSMTP发送方邮件服务配置, 不存在使用transport字段host邮件服务器地址,默认localhostport端口,可选,默认25auth认证,可选userpass
transport发送方邮件服务配置,不存在使用SMTP字段,可选。查看 nodemailer 文档的 transport 选项plugin邮件服务,默认smtpoptions配置项
attachment将日志作为电子邮件附件发送,可选enable是否启用,默认falsemessage邮件正文,默认See logs as attachmentfilename附件文件名,默认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' } }
});