如何在项目中使用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文件夹下查看对应的日志内容。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。