引言

日志的作用:

(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

结语

日志是我们日常开发项目中,必不可少的一部分,不管是开发还是生产环境都需要,所以大家都可以应用到自己的项目中去。