Fork me on GitHub

node日志

在package.json中加入

1
"log4js":"^0.6.38"

在bin下的www中加入以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
var fs = require('fs');
var logConfig = require('../public/config/log_config');

/**
* 确定目录是否存在,如果不存在则创建目录
*/
var confirmPath = function(pathStr) {

if(!fs.existsSync(pathStr)){
fs.mkdirSync(pathStr);
console.log('createPath: ' + pathStr);
}
}

在public下的config文件夹下创建log_config.js文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
var path = require('path');

//日志根目录
var baseLogPath = path.resolve(__dirname, '../logs')

//错误日志目录
var errorPath = "/error";
//错误日志文件名
var errorFileName = "error";
//错误日志输出完整路径
var errorLogPath = baseLogPath + errorPath + "/" + errorFileName;
// var errorLogPath = path.resolve(__dirname, "../logs/error/error");


//响应日志目录
var responsePath = "/response";
//响应日志文件名
var responseFileName = "response";
//响应日志输出完整路径
var responseLogPath = baseLogPath + responsePath + "/" + responseFileName;
// var responseLogPath = path.resolve(__dirname, "../logs/response/response");

module.exports = {
"appenders":
[
//错误日志
{
"category":"errorLogger", //logger名称
"type": "dateFile", //日志类型
"filename": errorLogPath, //日志输出位置
"alwaysIncludePattern":true, //是否总是有后缀名
"pattern": "-yyyy-MM-dd.log", //后缀,每天创建一个新的日志文件
"path": errorPath //自定义属性,错误日志的根目录
},
//响应日志
{
"category":"resLogger",
"type": "dateFile",
"filename": responseLogPath,
"alwaysIncludePattern":true,
"pattern": "-yyyy-MM-dd.log",
"path": responsePath
}
],
"levels": //设置logger名称对应的的日志等级
{
"errorLogger":"ERROR",
"resLogger":"ALL"
},
"baseLogPath": baseLogPath //logs根目录
}

在主目录下创建utils文件夹,再创建log_util.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
var log4js = require('log4js');

var log_config = require('../config/log_config');

//加载配置文件
log4js.configure(log_config);

var logUtil = {};

var errorLogger = log4js.getLogger('errorLogger');
var resLogger = log4js.getLogger('resLogger');

//封装错误日志
logUtil.logError = function (ctx, error, resTime) {
if (ctx && error) {
errorLogger.error(formatError(ctx, error, resTime));
}
};

//封装响应日志
logUtil.logResponse = function (ctx, resTime) {
if (ctx) {
resLogger.info(formatRes(ctx, resTime));
}
};

//格式化响应日志
var formatRes = function (ctx, resTime) {
var logText = new String();

//响应日志开始
logText += "\n" + "*************** response log start ***************" + "\n";

//添加请求日志
logText += formatReqLog(ctx.request, resTime);

//响应状态码
logText += "response status: " + ctx.status + "\n";

//响应内容
logText += "response body: " + "\n" + JSON.stringify(ctx.body) + "\n";

//响应日志结束
logText += "*************** response log end ***************" + "\n";

return logText;

}

//格式化错误日志
var formatError = function (ctx, err, resTime) {
var logText = new String();

//错误信息开始
logText += "\n" + "*************** error log start ***************" + "\n";

//添加请求日志
logText += formatReqLog(ctx.request, resTime);

//错误名称
logText += "err name: " + err.name + "\n";
//错误信息
logText += "err message: " + err.message + "\n";
//错误详情
logText += "err stack: " + err.stack + "\n";

//错误信息结束
logText += "*************** error log end ***************" + "\n";

return logText;
};

//格式化请求日志
var formatReqLog = function (req, resTime) {

var logText = new String();

var method = req.method;
//访问方法
logText += "request method: " + method + "\n";

//请求原始地址
logText += "request originalUrl: " + req.originalUrl + "\n";

//客户端ip
logText += "request client ip: " + req.ip + "\n";

//开始时间
var startTime;
//请求参数
if (method === 'GET') {
logText += "request query: " + JSON.stringify(req.query) + "\n";
// startTime = req.query.requestStartTime;
} else {
logText += "request body: " + "\n" + JSON.stringify(req.body) + "\n";
// startTime = req.body.requestStartTime;
}
//服务器响应时间
logText += "response time: " + resTime + "\n";

return logText;
}

module.exports = logUtil;

在app中加入以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const logUtil = require('./public/utils/log_util');


// logger
app.use(async (ctx, next) => {
//响应开始时间
const start = new Date();
//响应间隔时间
var ms;
try {
//开始进入到下一个中间件
await next();

ms = new Date() - start;
//记录响应日志
logUtil.logResponse(ctx, ms);

} catch (error) {

ms = new Date() - start;
//记录异常日志
logUtil.logError(ctx, error, ms);

ctx.body = {
success: false,
data: null,
message: error,
status: 101
}
}
});

在public文件下面创建logs文件夹,下面创建error以及response文件夹

显示 Gitment 评论