对于一个服务来讲,强大的日志系统功不可没,就进行log4js进行探索也不要多么精通,只需要能用会用即可。
根据网上了解,使用log4js主要需要进行两个步骤:配置和封装,
再次贴上了我的log.json配置,想要深入了解log4js的各种机制和使用,可以自行百度,由下可以对需要的日志内容进行分类处理
{
"replaceConsole": true,
"appenders": {
"console":{"type": "console", "category": "console"},
"http":{"type": "dateFile", "filename": "./log/url/","pattern": "yyyyMMddhh.txt", "maxLogSize": 10000000,"alwaysIncludePattern": true},
"logDebug":{"type": "dateFile", "filename": "./log/debug/","pattern": "yyyyMMddhh.txt", "maxLogSize": 10000000,"alwaysIncludePattern": true},
"logInfo":{"type": "dateFile","filename": "./log/info/","pattern": "yyyyMMddhh.txt", "maxLogSize": 10000000, "alwaysIncludePattern": true},
"logWarn":{"type": "dateFile","filename": "./log/warm/","pattern": "yyyyMMddhh.txt", "maxLogSize": 10000000, "alwaysIncludePattern": true},
"logErr":{"type": "dateFile","filename": "./log/error/","pattern": "yyyyMMddhh.txt", "maxLogSize": 10000000, "alwaysIncludePattern": true}
},
"categories": {
"default": {
"appenders": [
"console"
],
"level": "all"
},
"info": {
"appenders": [
"logInfo"
],
"level": "info"
},
"debug": {
"appenders": [
"logDebug"
],
"level": "debug"
},
"warn": {
"appenders": [
"logWarn"
],
"level": "WARN"
},
"error": {
"appenders": [
"logErr"
],
"level": "error"
},
"httpurl": {
"appenders": [
"http"
],
"level": "debug"
}
}
}
接下来就是封装,封装代码如下
var helper = {};
exports.helper = helper;
var log4js = require('log4js');
var fs = require("fs");
var path = require("path");
// 加载配置文件
var objConfig = require("../../log.json");
// 检查配置文件所需的目录是否存在,不存在时创建
// 目录创建完毕,才加载配置,不然会出异常
log4js.configure(objConfig);
var logDebug = log4js.getLogger('debug');
var logInfo = log4js.getLogger('info');
var logWarn = log4js.getLogger('warn');
var logErr = log4js.getLogger('error');
var logHttp = log4js.getLogger('httpurl');
helper.writeDebug = function(msg){
if(msg == null)
msg = "";
logDebug.debug(msg);
};
helper.writeInfo = function(msg){
if(msg == null)
msg = "";
logInfo.info(msg);
};
helper.writeWarn = function(msg){
if(msg == null)
msg = "";
logWarn.warn(msg);
};
helper.writeErr = function(msg, exp){
if(msg == null)
msg = "";
if(exp != null)
msg += "\r\n" + exp;
logErr.error(msg);
};
// 配合express用的方法
helper.use = function(app) {
//页面请求日志, level用auto时,默认级别是WARN
app.use(log4js.connectLogger(logHttp, {level:'debug', format:':method :url'}));
}
使用就只要用如下代码就可以了
log.writeInfo("db connectting...");
遇到问题分析
1 问题主要在配置上,appenders的类别和categories的类别混淆,在封装的时候调用的时categories。
2 pattern字段和alwaysIncludePattern合起来使用才能实现日志文件生成目录的一起生成,否则按照filename来定义。