1. 程式人生 > >深入解析Express進階之log4js實用入門指南

深入解析Express進階之log4js實用入門指南

深入解析Express進階之log4js實用入門指南
本篇文章主要介紹了Express進階之log4js實用入門指南,寫的十分的全面細緻,具有一定的參考價值,對此有需要的朋友可以參考學習下。如有不足之處,歡迎批評指正。

對於線上專案用來說,日誌是非常重要的一環。log4js是使用得比較多的一個日誌元件,經常跟Express一起配合使用。本文從入門例項開始,講解log4js的使用,以及如何跟Express進行整合。

入門例子

輸出日誌如下,包括日誌列印時間、日誌級別、日誌分類、日誌內容

// started.js
var log4js = require('log4js');
var logger = log4js.getLogger();
logger.debug('hello world');
 
// 輸出: 
// [2017-02-28 21:28:22.853] [DEBUG] [default] - hello world

日誌級別

logger.setLevel(‘INFO’); 表示想要列印的最低級別的日誌是 INFO ,也就是說,呼叫類似 logger.debug() 等級別低於 INFO 的介面,日誌是不會打印出來的。

var log4js = require('log4js');
var logger = log4js.getLogger();
logger.setLevel('INFO');
 /歡迎加入前端全棧開發交流圈一起吹水聊天學習交流:619586920
logger.debug('level: debug');
logger.info('level: info');
logger.error('level: error');
// 輸出如下:
// [2017-02-28 21:50:45.372] [INFO] [default] - level: info
// [2017-02-28 21:50:45.376] [ERROR] [default] - level: error

日誌類別

除級別外,還可以對日誌進行分類, log4js.getLogger(category) ,如下所示

var log4js = require('log4js');
var alogger = log4js.getLogger('category-a');
var blogger = log4js.getLogger('category-b');
alogger.info('hello');
blogger.info('hello'); 
// 輸出如下:
// [2017-02-28 22:36:57.570] [INFO] category-a - hello
// [2017-02-28 22:36:57.574] [INFO] category-b - hello
/歡迎加入前端全棧開發交流圈一起吹水聊天學習交流:619586920

appenders

appenders指定日誌輸出的位置,可以同時配置多個,用category進行區分。比如 log4js.getLogger(‘info’) 應用的就是 type 為 dateFile 的配置。
可以注意到, type 為 console 的配置沒有宣告 category ,因此,所有的日誌都會列印到控制檯。

var log4js = require('log4js'); 
log4js.configure({
  appenders: [
    { type: 'console'},
    { type: 'dateFile', filename: './logs/info.log', category: 'info' }
  ]
}); 
var logger = log4js.getLogger('info');
logger.setLevel('INFO');
 logger.trace('trace');
logger.debug('debug');
logger.info('info');
/歡迎加入前端全棧開發交流圈一起吹水聊天學習交流:619586920 
// 輸出如下:
// [2017-02-28 22:51:30.723] [INFO] info - info

express應用

一個比較簡單的例子如下,日誌全部列印到控制檯。

var express = require('express');
var log4js = require('log4js');
var app = express();
 log4js.configure({
  appenders: [
    { type: 'console', category: 'app' }
  ]
}); 
var logger = log4js.getLogger('app');
 logger.setLevel('INFO'); // 級別 > INFO 的日誌才會被列印 
app.use( log4js.connectLogger(logger) ); 
app.use(function(req, res, next){
  res.send('ok');
});/歡迎加入前端全棧開發交流圈一起吹水聊天學習交流:619586920
 
app.listen(3000);

訪問 http://127.0.0.1:3000 ,列印日誌如下

[2017-03-01 00:28:29.301] [INFO] app - ::ffff:127.0.0.1 - - “GET / HTTP/1.1” 304 - “” "Mozilla/5.0 (Macintosh; I

log4js.connectLogger(logger) 時,可以宣告日誌的級別。

// 級別 > INFO 的日誌才會被列印
logger.setLevel('INFO'); 
 
// 日誌的級別是 WARN 
app.use( log4js.connectLogger(logger, {level: 'WARN'}) );

注意,如果宣告的日誌級別低於 logger.setLevel(level) 限定的級別,那麼日誌不會被列印,如下例子。

logger.setLevel('INFO'); 
 
app.use( log4js.connectLogger(logger, {level: 'DEBUG'}) );

結語

歡迎加入我們

**歡迎加入我們**為了幫助大家讓學習變得輕鬆、高效,給大家免費分享一大批資料,幫助大家在成為全棧工程師,乃至架構師的路上披荊斬棘。在這裡給大家推薦一個前端全棧學習交流圈:864305860 歡迎大家進群交流討論,學習交流,共同進步。