如何在项目中使用log4.jspm2自带的日志内容不能满足日常需要,所以需要在项目中加入日志管理。这里学习一下log4的使用。效果很好。想查都可以查到,记录一下log4配合的简单使用//config.jsletpath=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,//输出文件名模式:'-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'}],级别:'错误'}},}log4日志封装这里是将log4封装成一个中间件,直接在app.js中调用即可//先安装log4js//log4.jsconstlog4Config=require('./config')constlog4js=require('log4js')//调用配置文件log4js.configure(log4Config)classCommonHandle{constructor(){}//格式化请求日志staticformatReqLog(ctx,time){lettext='------------requeststart------------'letmethod=ctx.methodtext+=`请求方法:${method}\n请求url:${ctx.originalUrl}\n`if(method='GET'){text+=`请求数据:${JSON.stringify(ctx.query)}\n`}else{text+=`请求数据:${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+=`错误内容:${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)}}}调用封装的log函数这里可以直接以中间件的形式调用//app.jsconstKoa=require('koa')constapp=newKoa()constLogJS=require('./common/log/log4')//log4.js引入app.use(LogJS())最后部署上线直接在根目录下的logs文件夹中查看对应的日志内容。链接地址
