node 日志管理log4js


node 日志管理log4js

一、默認的控制台輸出

我們使用express框架時,開發模式用node或者supervisor啟動nodejs應用時,控制台都是顯示如下的日志。

GET /css/bootstrap.min.css 304 1ms
GET /css/my.css 304 0ms
GET /js/bootstrap.min.js 304 4ms
GET /js/jquery-1.9.1.min.js 304 6ms
GET /js/holder.js 304 3ms
GET /cat/json/latest 200 6ms
GET /cat/json/master 200 4ms
GET /cat/json/classic 200 2ms
GET /about 200 6ms
GET /css/bootstrap.min.css 304 2ms
GET /css/my.css 304 2ms
GET /js/bootstrap.min.js 304 2ms
GET /js/jquery-1.9.1.min.js 304 1ms
GET /js/holder.js 304 1ms
GET /js/bootstrap.min.js 304 1ms
GET / 304 6ms
GET /js/jquery-1.9.1.min.js 304 2ms
GET /css/my.css 304 1ms
GET /css/bootstrap.min.css 304 1ms
GET /js/bootstrap.min.js 304 2ms
GET /js/holder.js 304 2ms
GET /cat/json/latest 200 3ms
GET /cat/json/master 200 2ms
GET /cat/json/classic 200 2ms
GET /admin/ 304 13ms
GET /css/bootstrap.min.css 304 3ms
GET /js/jquery-1.9.1.min.js 304 2ms
GET /css/my.css 304 2ms
GET /js/bootstrap.min.js 304 1ms
GET /js/holder.js 304 2ms

 

我們也可以在代碼中,用console.log()打印一些控制台日志。

修改routes/index.js

exports.index = function(req, res){
console.log("This is an index page!");
res.render('index', {
        title:'首頁|moive.me',
        page:'index'
    });
};

 

訪問頁面,結果如下:

This is an index page!
GET / 304 19ms
GET /css/bootstrap.min.css 304 4ms
GET /css/my.css 304 2ms
GET /js/jquery-1.9.1.min.js 304 38ms
GET /js/holder.js 304 29ms
GET /js/bootstrap.min.js 304 28ms

這樣的輸出的結果,都是在控制台顯示,一旦server重啟日志就丟失了。對於程序開發來說,這樣的輸出已經夠用了。但是在生產環境上,我們希望能把控制台的輸出,保存到文件中,而且需要更多的信息,不僅僅是默認的簡化的日志信息。

由於express框架沒有日志功能,我們需要引入log4js包來完成這個功能。

二、配置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, 感謝原作者分享。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM