本文是博客迁移文章
log4.js
log4 in nodejs
日志是很关键的一点
日志有助于我们排查bug,快速定位应用问题,监控应用
INSTALL
npm install log4js -S
simple
var log4js = require('log4js');
var logger = log4js.getLogger();
logger.level = 'debug'; // default level is OFF // which means no logs at all.
logger.debug("Some debug messages");
级别 LEVEL(日志级别)
越往下级别越高
- ALL 输出所有日志
- TRACE
- DEBUG
- INFO
- WARN 输出级别相等或者高级别的日志
- ERROR
- FATAL
- MARK
- OFF 所有日志都不输出
日志级别有助于我们对日志的筛选与查看
设立分组日志类型 getLogger
const log4js = require('log4js')
const log = log4js.getLogger('kkk')
log.error('测试')
// [2018-05-15 20:28:24.458] [ERROR] kkk - 123
log4js.configure接收categories
接收一个appenders数组 以及一个level字符串
eg: level: error
代表只接受error或error级别以上的日志事件。
日志事件(保存文件,发送邮件等)
Appender
文件保存
log4js.configure({
//是appenders,不是单数
appenders:[{
//以文件格式存储
type: 'file',
//自动创建123.log文件 // 文件名字
filename: '123.log'
}]
})
var logger = log4js.getLogger('appenders');
logger.info('this no error');
type = datefile
以日期命名日志存储文件
log4js.configure({
appenders:[{
type: 'dateFile',
filename:'123'
}]
})
logLevelFilter
使用logLevelFilter来过滤日志事件从而过滤Appender
log4js.configure(
{
appenders: {
everything: { type: 'file', filename: 'all-the-logs.log' },
emergencies: { type: 'file', filename: 'panic-now.log' },
'just-errors': { type: 'logLevelFilter', appender: 'emergencies', level: 'error' }
},
categories: {
default: { appenders: ['just-errors', 'everything' ], level: 'debug' }
}
}
)
const log = log4js.getLogger('xixi')
log.error('测试')
log.info('测试2')
panic-now.log 会写入测试 all-the-logs.log 会写入测试/测试2
日志压缩
maxLogSize: 10485760, compress: true
设置最大日志体积,以及压缩为true
输出到控制台
appenders type - console 即可
Layout 设置日志输出格式
基本布局
输出时间戳,级别,类别,格式化的日志事件数据。
type - basic
颜色布局
type- coloured(或colored)
TRACE - '蓝色' DEBUG - '青色' INFO - '绿色' WARN - '黄色' ERROR - '红' FATAL - 'magenta'
输出日志第一个值
logger.info('test', 'test')
Pattern
一些内置占位符
- %r toLocaleTimeString格式的时间
- %p 日志级别
- %c 日志类别
- %h 主机名
- %m 记录数据
log4js-node.github.io/log4js-node… 具体在文档内
不妨重构一下以前我以前使用log4js作为博客后端的日志记录呗。
var log4js = require('log4js')
var LOG_PATH = require('../config/index.js')['LOG_PATH']||{}
log4js.configure({
appenders: [
{
type: 'file',
filename: LOG_PATH['access']||'logs/access.log',
maxLogSize: 102400,
pattern: '-yyyy-MM-dd.log',
alwaysIncludePattern: true,
backups:3
}
]
})
let log = log4js.getLogger('koa-blog')
log.setLevel('AUTO')
module.exports = log
这是以前使用的记录模块,比较粗略但是勉强够用,可以看到已经基本上log有写入文件中并且也有进行备份操作
但是这里模块细分我觉得还是没到位
而且日志等级也没有拆分
那这边可以简单修改一下
const log4js = require('log4js')
log4js.configure({
appenders: {
debug: {
type: 'file',
filename: 'logs/debug.log',
maxLogSize: 102400,
pattern: '-yyyy-MM-dd.log',
alwaysIncludePattern: true,
backups:3
},
all: {
type: 'file',
filename: 'logs/all.log',
maxLogSize: 102400,
pattern: '-yyyy-MM-dd.log',
alwaysIncludePattern: true,
backups:3
},
error: {
type: 'file',
filename: 'logs/error.log',
maxLogSize: 102400,
pattern: '-yyyy-MM-dd.log',
alwaysIncludePattern: true,
backups:3
},
console: {
type: 'console',
layout: { type: 'colored'}
}
},
categories:{
error: {appenders: ['console', 'error'], level: 'error'},
default: {appenders: ['console', 'all'], level: 'ALL'},
debug: {appenders: ['debug'], level: 'debug'},
}
})
module.exports = log
这边简单对日志进行了分类。并且梳理了对日志等级的处理