如何在项目中使用log4.js的方法步骤
pm2中自带的日志内容是不能满足日常的需求的,因此需要在项目中加上日志管理,这里研究了下log4的使用方法,效果挺好的,想要查看的都可以找到,记录下简单的使用步骤
log4的配合
//config.js
letpath=require('path');
//日志根目录
letbaseLogPath=path.resolve(__dirname,'../../../logs');
//请求日志目录
letreqPath='/request';
//请求日志文件名
letreqFileName='request';
//请求日志输出完整路径
letreqLogPath=baseLogPath+reqPath+'/'+reqFileName;
//响应日志目录
letresPath='/response';
//响应日志文件名
letresFileName='response';
//响应日志输出完整路径
letresLogPath=baseLogPath+resPath+'/'+resFileName;
//错误日志目录
leterrPath='/error';
//错误日志文件名
leterrFileName='error';
//错误日志输出完整路径
leterrLogPath=baseLogPath+errPath+'/'+errFileName;
module.exports={
appenders:{
//所有的日志
'console':{type:'console'},
//请求日志
'reqLogger':{
type:'dateFile',//日志类型
filename:reqLogPath,//输出文件名
pattern:'-yyyy-MM-dd-hh.log',//后缀
alwaysIncludePattern:true,//上面两个参数是否合并
encoding:'utf-8',//编码格式
maxLogSize:1000,//最大存储内容
},
//响应日志
'resLogger':{
type:'dateFile',
filename:resLogPath,
pattern:'-yyyy-MM-dd-hh.log',
alwaysIncludePattern:true,
encoding:'utf-8',
maxLogSize:1000,
},
//错误日志
'errLogger':{
type:'dateFile',
filename:errLogPath,
pattern:'-yyyy-MM-dd-hh.log',
alwaysIncludePattern:true,
encoding:'utf-8',
maxLogSize:1000,
}
},
//分类以及日志等级
categories:{
default:{
appenders:['console'],
level:'all'
},
reqLogger:{
appenders:['reqLogger'],
level:'info'
},
resLogger:{
appenders:['resLogger'],
level:'info'
},
errLogger:{
appenders:['errLogger'],
level:'error'
}
},
}
log4的日志封装
这里是把log4封装成一个中间件,在app.js中直接调用就可以了
//先安装log4js
//log4.js
constlog4Config=require('./config')
constlog4js=require('log4js')
//调用配置文件
log4js.configure(log4Config)
classCommonHandle{
constructor(){}
//格式化请求日志
staticformatReqLog(ctx,time){
lettext='------------requeststart------------'
letmethod=ctx.method
text+=`requestmethod:${method}\nrequesturl:${ctx.originalUrl}\n`
if(method='GET'){
text+=`requestdata:${JSON.stringify(ctx.query)}\n`
}else{
text+=`requestdata:${JSON.stringify(ctx.body)}\n`
}
text+=`ctxall:${JSON.stringify(ctx)}`
returntext
}
//格式化相应日志
staticformatResLog(ctx,time){
lettext='------------responsestart------------'
text+=`responseresult:${JSON.stringify(ctx.response.body)}\n`
text+=`responseall:${JSON.stringify(ctx)}\n`
text+=`responsetime:${time}\n`
returntext
}
//格式化错误日志
staticformatErrorLog(ctx,error,time){
lettext='------------errorstart------------'
text+=this.formatResLog(ctx,time)
text+=`errorcontent:${JSON.stringify(error)}`
returntext
}
}
classHandleLoggerextendsCommonHandle{
constructor(){
super()
}
//请求日志
staticreqLogger(ctx){
log4js.getLogger('reqLogger').info(this.formatReqLog(ctx))
}
//相应日志
staticresLogger(ctx,time){
log4js.getLogger('resLogger').info(this.formatResLog(ctx,time))
}
//错误日志
staticerrorLogger(ctx,error,time){
log4js.getLogger('errLogger').info(this.formatErrorLog(ctx,error,time))
}
}
module.exports=(options)=>{
returnasync(ctx,next)=>{
conststartTime=newDate()
letperiod;
try{
//请求日志
HandleLogger.reqLogger(ctx)
awaitnext()
period=newDate()-startTime
//响应日志
HandleLogger.resLogger(ctx,period)
}catch(err){
period=newDate()-startTime
//错误日志
HandleLogger.errorLogger(ctx,err,period)
}
}
}
调用封装好的日志函数
这里直接以中间件的形式调用就可以了
//app.js
constKoa=require('koa')
constapp=newKoa()
constLogJS=require('./common/log/log4')
//log4.js引入
app.use(LogJS())
最后部署上线之后就能直接在根目录下的logs文件夹下查看对应的日志内容。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。