最近用到nodejs日志模塊--log4js,彌補(bǔ)一下之前大致使用的迷惑寝志。先看下圖總覽吗讶,接下來瑞眼,主要由淺入深的記錄log4js的常見配置谆级。
第一部分 入口【收集日志】
所謂的入口烤礁,其實(shí)就是所謂的收集日志信息讼积,如何有效、分門別類的收集所需信息脚仔,使我們記錄日志文件的第一步勤众,當(dāng)然,日志的作用就不在此啰嗦了鲤脏。
log4js提供了等級(jí)分類與別名分類
配置
npm install log4js
1.1 等級(jí)分類
創(chuàng)建文件testLog4.js,
//testLog4.js
var log4js = require('log4js');
//logger 是log4js的實(shí)例
var logger = log4js.getLogger();
logger.trace('this is trace');
logger.debug('this is debug');
logger.info('this is info');
logger.warn('this is warn');
logger.error('this is error');
logger.fatal('this is fatal');
結(jié)果為
類似于console實(shí)例中的log/error等们颜,這里先實(shí)例化log4js,采用不同的等級(jí)輸出不同的信息。等級(jí)有低到高顏色漸變猎醇。
以上圖片剽竊自Node.js 之 log4js 完全講解.
很直觀的將不同的等級(jí)的日志分類窥突。一方面方便了我們查看終端日志,另外之后在過濾中同樣可以起到作用硫嘶。
分等級(jí)不就是為了便于查找么阻问,第一種分類法到此結(jié)束。
1.2 類型分類
實(shí)例化log4js時(shí)指定一個(gè)別名沦疾,然后在日志中可以方便區(qū)分哪個(gè)文件等称近。
//testLog4.js
/*
類型分類
*/
//實(shí)例化時(shí),唯一可以傳的一個(gè)參數(shù)category
var logger = log4js.getLogger('隨便起名字啦');
logger.trace('this is trace');
logger.debug('this is debug');
logger.info('this is info');
logger.warn('this is warn');
logger.error('this is error');
logger.fatal('this is fatal');
如下圖
一圖勝前言哮塞,收集日志的方法都有了刨秆,具體的使用方法,后續(xù)羅列忆畅,緊接的任務(wù)就是如何保存衡未?
第二部分 出口【輸出日志】
2.1 Appender
剛我們只是初始化實(shí)例,以不同的類型家凯、等級(jí)輸出缓醋。默認(rèn)為console輸出,如何保存在文件中绊诲,就是appender上場(chǎng)了改衩。
2.1.1 file保存
//testLog4.js
log4js.configure({
//是appenders,不是單數(shù)
appenders:[{
//以文件格式存儲(chǔ)
type: 'file',
//自動(dòng)創(chuàng)建123.log文件
filename: '123.log'
}]
})
var logger = log4js.getLogger('appenders');
logger.info('this no error');
結(jié)果保存在123.log中:
//123.log
[2017-09-23 16:01:59.940] [INFO] appenders - this no error
2.1.2 datefile保存
最簡單的日期保存例子驯镊,將日志保存在日志文件中,以天為單位竭鞍。
//testLog4.js
/*
dateFile板惑,根據(jù)時(shí)間保存文件位置,文件自動(dòng)創(chuàng)建
*/
log4js.configure({
appenders:[{
type: 'dateFile',
//文件名為= filename + pattern, 設(shè)置為alwaysIncludePattern:true
filename: '234',
pattern: '-yyyy-MM-dd.log',
//包含模型
alwaysIncludePattern: true,
}]
})
var logger = log4js.getLogger();
logger.info('this is datefile');
結(jié)果:
//234-2017-09-23.log
[2017-09-23 16:17:06.764] [INFO] [default] - this is datefile
2.1.3 levelFilter 過濾篩選
/*
loglevelFilter 過濾篩選
*/
log4js.configure({
appenders:[
//控制臺(tái)輸出
{"type": "console"},
{ //日志過濾
type: 'loglevelFilter',
// 權(quán)重大于或者等于level【debug】的日志將會(huì)輸出
level: 'WARN',
//篩選model1
category: 'model1',
// 同時(shí)支持?jǐn)?shù)組
// category:['model1', 'model2'],
appender:{
type: 'file',
filename: '345.log'
}
}
],
"replaceConsole": true
})
var logger = log4js.getLogger('model1');
logger.trace('this is trace');
logger.debug('this is debug');
logger.info('this is info');
logger.warn('this is warn');
logger.error('this is error');
logger.fatal('this is fatal');
var logger = log4js.getLogger('model2');
logger.trace('this is trace');
logger.debug('this is debug');
logger.info('this is info');
logger.warn('this is warn');
logger.error('this is error');
logger.fatal('this is fatal');
結(jié)果篩選如下
第三部分 layout配置
暫緩
第四部分 實(shí)例配置Express+log4js
4.1 需求一
- 每天生成一個(gè)日志文件,放在/logs目錄下偎快,名字如2017-09-23.log冯乘;
- 單獨(dú)將log4js配置在一個(gè)文件中,外界不需要每次配置晒夹;
- 記錄客戶端請(qǐng)求的HTTP狀態(tài)碼裆馒、URL姊氓、方法。
- 終端顯示所有日志信息喷好,日志文件只記錄WARN以及以上級(jí)別的信息翔横。
配置文件:logConfig.js
var log4js = require('log4js');
const fs = require('fs');
levels = {
'trace': log4js.levels.TRACE,
'debug': log4js.levels.DEBUG,
'info': log4js.levels.INFO,
'warn': log4js.levels.WARN,
'error': log4js.levels.ERROR,
'fatal': log4js.levels.FATAL
};
function judgePath(pathStr) {
if (!fs.existsSync(pathStr)) {
fs.mkdirSync(pathStr);
console.log('createPath: ' + pathStr);
}
}
log4js.configure({
appenders:[
//控制臺(tái)輸出
{"type": "console"},
{type: 'dateFile',
//文件名為= filename + pattern, 設(shè)置為alwaysIncludePattern:true
filename: 'logs/', // 需要手動(dòng)創(chuàng)建此文件夾
pattern: 'yyyy-MM-dd.log',
//包含模型
alwaysIncludePattern: true,
}],
replaceConsole: true // 替換 console.log
})
exports.logger = function (name, level) {
var logger = log4js.getLogger(name);
//默認(rèn)為debug權(quán)限及以上
logger.setLevel(levels[level] || levels['debug']);
return logger;
};
exports.use = function (app, level) {
//加載中間件
app.use(log4js.connectLogger(log4js.getLogger('logInfo'), {
level: levels[level] || levels['debug'],
//格式化http相關(guān)信息
format: ':method :url :status'
}));
};
app.js使用中間件
var log4js = require('./config/logConfig.js');
var app = express();
log4js.use(app);
index.js中使用log4js
var express = require('express');
var router = express.Router();
//category名字為inde.js 只收錄warn以及以上權(quán)限信息
var logger = require('../config/logConfig.js').logger('index.js', 'warn');
/* GET home page. */
router.get('/', function (req, res, next) {
//不顯示
console.log('This is an index page!');
logger.trace('This is an index page! -- log4js');
logger.debug('This is an index page! -- log4js');
logger.info('This is an index page! -- log4js');
logger.warn('This is an index page! -- log4js');
logger.error('This is an index page! -- log4js');
logger.fatal('This is an index page! -- log4js');
res.render('index', {title: 'log4js'});
});
module.exports = router;
4.2 需求二
2.x版本的區(qū)別
log4js.configure(...); // set up your categories and appenders
const logger = log4js.getLogger('console');
console.log = logger.info.bind(logger); // do the same for others - console.debug, etc.
暫緩
參考列表
Node.js 之 log4js 完全講解
log4js-Node.js中的日志管理模塊使用與封裝
Log4js配置詳解
nodejs開發(fā)——log4js學(xué)習(xí)
大搜車NodeJS日志規(guī)范化與分析監(jiān)控
基于node+express+log4js的前端異常信息監(jiān)控
node.js項(xiàng)目中使用log4js保存日志文件
更多精彩內(nèi)容請(qǐng)關(guān)注“IT實(shí)戰(zhàn)聯(lián)盟”哦~~~