程序日志对于问题定位、调试,系统性能调优至关重要,尤其是系统复杂以及在线运行的情况下。好的开发框架都会有一个可开启关闭/可配置记录级别的日志系统。
我们可以从以下几个方面来做选型:
1. 每行日志都需要有准确无误的时间戳
2. 日志格式容易被人理解同时也容易被计算机进行分析处理
3. 允许配置不同的日志输出,比如对于不同级别的日志配置不同的处理方式
符合上述的要求的nodejs日志管理控件有很多,诸如Bunyan、Winston,还有Express框架中包含的logger等等。
但这些log记录方法使用起来总觉得缺少了点什么。尤其是对于使用sublime text编辑器+console控制台命令进行程序开发,习惯使用console.log,console.error方式记录错误信息,在控制台进行调试的JavaScript工程师们,每一处程序断点处加入console.log()控制台输出的同时,还有再加上诸如logger.debug()进行文件级别的日志输出,未免会有些不习惯。
这里分享推荐一款较为流行,且能满足上述问题的日志控件log4js-node。
log4js-node的每条log输出格式有如下几个字段:日志产生时间,level,日志分类,日志内容。如果用户没有配置,日志分类字段为“default”。
log4js-node将输出的log分为六个的level,每个level的含义从字面就可以看出, 对于不同的level,log输出到终端时会使用不同的颜色(trace: 蓝色,debug: 青色, info:绿色,warn:黄色,error:红色, fatal:粉色)。
安装特别简单,npm install log4js。
接下来就是具体配置了,笔者的参考配置是:
//配置日志相关
if(!fs.existsSync('logs')){ //如果没有日志文件目录,则创建
fs.mkdirSync('logs',0777);
}
log4js.configure({ //更改配置项
appenders: [
{ type: 'console', //此处即时console控制台输出的地方
category: 'console'
},
{
type: 'dateFile', //此处为日志文件流输出的地方
filename: './logs/',
pattern: "debug_yyyyMMdd.log", //日志记录文件名称可使用正则
alwaysIncludePattern: true, //若使用正则文件名,须开启
maxLogSize: 4096,
backups: 4,
category: 'console' //日志文件输出的分类,若为console,则相当于在console和file同时输出。
}
],
'levels':{ 'console': 'DEBUG'}, //设置输出的日志最低级别,如debug一下的日志级别,如trace不输出
replaceConsole: true //替代原先的console.log的默认输出
});
var logInfo = log4js.getLogger('console');
exports.logger = logInfo;
exports.useLogger = function(app){
//页面请求日志,用auto的话,默认级别是WARN,笔者的框架是express
app.use(log4js.connectLogger(logInfo, {level:'auto', format:':method :url'}));
}
参考效果:
只需要在程序中设置一次断点:
控制台显示:
文件输出:
是不是很赞~,参考链接:
https://github.com/nomiddlename/log4js-node/wiki/Appenders
网易云新用户大礼包:https://www.163yun.com/gift
本文来自网易实践者社区,经作者陈盛授权发布。