bluejamin222的gravatar头像
bluejamin222 2016-10-25 14:35:00
配置log4js与express框架集成

配置log4js与express框架集成

1、安装
npm install log4js


2、修改项目入口配置文件,如日志分析项目express.js


复制代码
var log4js = require('log4js');
log4js.configure({
  appenders: [
    { type: 'console' }, //控制台输出
    {
      type: 'file', //文件输出
      filename: 'logs/log.log',
      maxLogSize: 1024,
      backups:3,
      category: 'normal'
    }
  ]
});
var logger = log4js.getLogger('normal');
logger.setLevel('INFO');
...

app.use(log4js.connectLogger(logger, {level:log4js.levels.INFO}));
app.use(app.router);

复制代码

 

需要在express.js中进行log4js的配置。 appenders中配置了两个输出,一个是控制台输出,一个是文件输出。

appenders.type=file的对象,指定文件输出位置及文件大小,当超过maxLogSize大小时,会自动生成一个新文件。logs的文件目录要动手创建。 level:log4js.levels.INFO, 设置默认日志输出级别是INFO。

log4js的输出级别6个: trace, debug, info, warn, error, fatal
•logger.trace(‘Entering cheese testing’);
•logger.debug(‘Got cheese.’);
•logger.info(‘Cheese is Gouda.’);
•logger.warn(‘Cheese is quite smelly.’);
•logger.error(‘Cheese is too ripe!’);
•logger.fatal(‘Cheese was breeding ground for listeria.’);

如果输出级别是INFO,则不会打印出低于info级别的日志trace,debug,只打印info,warn,error,fatal。这样做 的好处在于,在生产环境中我们可能只关心异常和错误,并不关心调试信息。从而大大减少日志的输出,能减少磁盘写入。而在开发环境中,我们可以需要打印非常 多的信息,帮助开发人员定位错误,调试代码。

还有一个好处就是,代码中可以混有各种的日志打印代码。我们只要在一个配置文件中,修改输出级别,日志输出就会发生变化,不用修改所有的代码。如果所有地方都是console.log(),那么上线的时候,改动这个东西就要花很多时间。

三、根据项目配置log4js

1.增加replaceConsole代替console.log() 增加replaceConsole配置,让所有console输出到日志中,以[INFO] console代替console默认样式。


复制代码
 var log4js = require('log4js');
 log4js.configure({
   appenders: [
     { type: 'console' },{
       type: 'file',
       filename: 'logs/log.log',
       maxLogSize: 1024,
       backups:4,
       category: 'normal'
     }
   ],
   replaceConsole: true
 });

复制代码


2.调整日志输出的格式

 app.use(log4js.connectLogger(logger, {level:
 level:log4js.levels.INFO, format:':method :url'}));

 


3.自动调整日志输出级别

 日志级别对应规则:
 http responses 3xx, level = WARN
 http responses 4xx & 5xx, level = ERROR
 else, level = INFO 

 

设置level为auto:

  app.use(log4js.connectLogger(logger, {level: 'auto', format:':method :url'}));

 


四、调整log4js结构

我们在配置log4js时会有一个问题。就是以上所有配置信息都是在express.js中做的,logger也是在这里直接定义的。如果在控制器(routes)想用log4js进行输出,我们现在拿不到logger的句柄。

新建立log.js


复制代码
var log4js = require('log4js');

log4js.configure({

    appenders: [
        {
            type: 'console',
            category: "console"

        }, //控制台输出
        {
            type: "file",
            filename: 'logs/log.log',
            pattern: "_yyyy-MM-dd",
            maxLogSize: 20480,
            backups: 3,
            category: 'dateFileLog'

        }//日期文件格式
    ],
    replaceConsole: true,   //替换console.log
    levels:{
        dateFileLog: 'debug',
        console: 'debug'
    }
});


var dateFileLog = log4js.getLogger('dateFileLog');
var consoleLog = log4js.getLogger('console');
exports.logger = consoleLog;


exports.use = function(app) {
    app.use(log4js.connectLogger(consoleLog, {level:'INFO', format:':method :url'}));
}

复制代码

 

我们把logger单独定义出来,并且做为API暴露出来,此处是开发调试,没有使用文件输出。 这样在其他模块中使用logger输出日志只需如下操作:

var logger = require('../../log').logger;
logger.debug("collectTime=%s",collectTime);

样我们就已经玩转log4js了,如果部署生产需要文件输出只要修改log.js中dateFileLog级别,然后设置exports.logger=dateFileLog即可。

原文地址:http://www.blogways.net/blog/2014/06/09/node-log4js.html, 感谢原作者分享。


打赏
最近浏览
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友