奉上代码: node服务demo代码=》koa2-server项目代码;vue前端demo代码=》 vue-client项目代码
如果git登不上可以换gitee=》koa2-server项目代码;vue前端demo代码=》 vue-client项目代码
日志输出
需要用到的依赖log4js
官方推荐的参看案例=》log4js-example
详细的介绍=》Node.js 之 log4js 完全讲解
log配置
详细js文件地址=》日志配置
日志格式设置在appenders对象里
appenders: {
'rule-console': { type: 'console' },
handleLogger: {
type: 'dateFile',
filename: handleLogPath,
pattern: '-yyyy-MM-dd.log', // 文件名,每天一个日志文件
alwaysIncludePattern: true,
encoding: 'utf-8',
maxLogSize: 10485760, // 日志文件大小最大1M,单位字节,超出后自动新增一个
numBackups: 3,
path: handlePath // 生成路径
}
},
// 配置不用日志种类
categories: {
handleLogger: { appenders: ['handleLogger'], level: 'all' },
}
日志使用
详细js文件地址=》日志使用
const log4js = require('log4js');
const logsConfig = require('../config/logs.js');
// 加载配置文件
log4js.configure(logsConfig);
// 调用预先定义的日志名称
const resLogger = log4js.getLogger('resLogger');
const errorLogger = log4js.getLogger('errorLogger');
const handleLogger = log4js.getLogger('handleLogger');
const consoleLogger = log4js.getLogger();
// 格式化日志文本 加上日志头尾和换行方便查看 ==> 普通日志、请求日志、响应日志、操作日志、错误日志
const formatText = {
info: function (info) {
let logText = '';
// 响应日志头信息
logText += '\n' + '***************info log start ***************' + '\n';
// 响应内容
logText += 'info detail: ' + '\n' + JSON.stringify(info) + '\n';
// 响应日志结束信息
logText += '*************** info log end ***************' + '\n';
return logText;
},
request: function (req, resTime) {
let logText = '';
const method = req.method;
// 访问方法
logText += 'request method: ' + method + '\n';
// 请求原始地址
logText += 'request originalUrl: ' + req.originalUrl + '\n';
// 客户端ip
logText += 'request client ip: ' + req.ip + '\n';
// 开始时间
let 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;
},
response: function (ctx, resTime) {
let logText = '';
// 响应日志开始
logText += '\n' + '*************** response log start ***************' + '\n';
// 添加请求日志
logText += formatText.request(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;
},
handle: function (info) {
let logText = '';
// 响应日志开始
logText += '\n' + '***************info log start ***************' + '\n';
// 响应内容
logText += 'handle info detail: ' + '\n' + JSON.stringify(info).replace(/\\n/g, '\n') + '\n';
// 响应日志结束
logText += '*************** info log end ***************' + '\n';
return logText;
},
error: function (ctx, err, resTime) {
let logText = '';
// 错误信息开始
logText += '\n' + '*************** error log start ***************' + '\n';
// 添加请求日志
logText += formatText.request(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;
}
};
module.exports = {
// 封装普通日志-未使用
logInfo: function (info) {
if (info) {
consoleLogger.info(formatText.info(info));
}
},
// 封装响应日志
logResponse: function (ctx, resTime) {
if (ctx) {
resLogger.info(formatText.response(ctx, resTime));
}
},
// 封装操作日志
logHandle: function (res) {
if (res) {
handleLogger.info(formatText.handle(res));
}
},
// 封装错误日志
logError: function (ctx, error, resTime) {
if (ctx && error) {
errorLogger.error(formatText.error(ctx, error, resTime));
}
}
};
首先引用并使用配置,然后在formatText 定义输出日志的格式,最后封装日志。调用的时候只需要像调用公共方法一样就行了,比如:
const logsUtil = require('xxx'); // 引用日志文件
...
...
logsUtil.logError(ctx, err, ms); // 记录异常日志
这样每次项目跑起来就会生成当天的日志文件
日志文本
上一篇:node从入门到放弃系列之(8)koa2 swagger的使用
下一篇:node从入门到放弃系列之(10)图形验证功能