引言
日志的作用:
(1)、清除的记录用户请求的接口
(2)、请求接口时是否发生错误
(3)、错误日志,便于及时修复错误
(4)、利于复现错误,调试等
这里我们就用log4js
来对日志进行处理
log4js配置
(1)、安装log4js
npm install log4js --save
(2)、配置
新建config/logConfig.js
const express = require('express')
const log4js = require('log4js') // 加载log4js模块
const path = require('path')
const app = express()
log4js.configure({
appenders: {
// 控制台输出
console: { type: 'console' },
// 全部日志文件
app: {
type: 'file',
filename: path.join(__dirname, '../logs/app'),
maxLogSize: 1024 * 500, //一个文件的大小,超出后会自动新生成一个文件
backups: 2, // 备份的文件数量
pattern: "_yyyy-MM-dd.log",
alwaysIncludePattern: true,
},
// 错误日志文件
errorFile: {
type: 'file',
filename: path.join(__dirname, '../logs/error'),
maxLogSize: 1024 * 500, // 一个文件的大小,超出后会自动新生成一个文件
backups: 2, // 备份的文件数量
pattern: "_yyyy-MM-dd.log",
alwaysIncludePattern: true,
}
},
categories: {
// 默认日志,输出debug 及以上级别的日志
default: { appenders: [
'app',
'console' // 不向控制台输出
], level: 'debug' },
// 错误日志,输出error 及以上级别的日志
error: { appenders: [ 'errorFile' ], level: 'error' },
},
replaceConsole: true, // 替换console.log
});
// 获取默认日志
const defaultLogger = log4js.getLogger()
// 获取错误级别日志
const errorLogger = log4js.getLogger('error')
// 日志代理,同时调用默认日志和错误日志
const loggerProxy = {};
const levels = log4js.levels.levels;
levels.forEach(level => {
const curLevel = level.levelStr.toLowerCase();
loggerProxy[curLevel] = (...params) => {
defaultLogger[curLevel](...params);
errorLogger[curLevel](...params);
}
});
module.exports = loggerProxy
这里的配置文件注释已经非常明晰,就不多做解释,然后把我们项目中用console.log的地方替换一下
重新运行,项目根目录已经生成logs
目录,并有了两个日志文件,打开看,日志记录非常清晰,什么时间请求,请求参数是什么
然后我们看看错误,/api/user/info
接口需要传入id的,我们不传试试看,这里的id为空,就会执行utils.sendError()
方法
if(!params.id){
utils.sendError(res, '用户ID不能为空')
return
}
utils.js
里面的sendError
方法实现如下:
sendError(res, message, code = 500){
logger.error(typeof message, message)
if(typeof message === 'string'){
return res.status(500).send({
code: code,
message: message
})
}
if(typeof message === 'object'){
return res.status(500).send(message)
}
}
日志记录错误,并且接口返回500错误或者自定义错误码,和错误message
结语
日志是我们日常开发项目中,必不可少的一部分,不管是开发还是生产环境都需要,所以大家都可以应用到自己的项目中去。
正文结束
Ctrl + Enter