当前位置: 首页 > 后端技术 > Node.js

Koa日志中间件包开发

时间:2023-04-03 17:42:32 Node.js

Koa日志中间件开发包对于一个服务端应用来说,日志记录是必不可少的,我们需要用它来记录项目程序每天做了什么,什么时候出错,发生了什么错误等等.,方便以后回顾,实时掌握服务器运行状态,还原问题现场。日志的作用是记录服务器程序的运行状态;帮助开发者快速捕获错误,定位并解决故障。日志中间件开发工具log4js在node中没有自带日志模块,所以需要借助第三方模块才能使用该模块:log4js安装:npmilog4js-Slogsjs官方文档日志分类:访问日志:记录客户端的访问项目,主要是一个http请求。它用于帮助改进和增强网站的性能和用户体验;应用日志:项目标识和记录位置打印的日志,包括异常情况,方便查询项目运行状态和定位bug(包括debug、info、warn、error等级别)。日志级别如果配置了日志级别,则只能记录比??设置的日志级别更高级别的日志信息。如果配置了level:'error',则日志中间只能输出error、fatar、mark级别的日志信息软件开发设置需要记录需要记录的信息段(log_info.js)exportdefault(ctx,message,commonInfo)=>{const{method,//请求方法url,//请求链接主机,//发送请求主机头的客户端//请求中的头}=ctx.request;constclient={method,url,host,message,referer:headers['referer'],//请求源地址userAgent:headers['user-agent']//客户端信息设备和浏览器信息}returnJSON.stringify(Object.assign(commonInfo,client));}设置公共获取配置后的log4js对象(logger.js)constgetLog=({env,appLogLevel,dir},name)=>{//log4js基本描述配置项,可以自定义键名,用于categories.appenders自定义选择letappenders={//自定义配置项1cheese:{type:'dateFile',//输出日志类型filename:`${dir}/task`,//输出日志路径pattern:'-yyyy-MM-dd.log',//日志文件后缀(task-2019-03-08.log)alwaysIncludePattern:true}}//如果开发环境配置为在控制台打印信息if(env==="dev"||env==="local"||env==="development"){//自定义配置项2appenders.out={type:"stdout"}}//log4js配置letconfig={appenders,//获取日志对象的键名作为getLogger方法,默认使用categories默认:{default:{appenders:Object.keys(appenders),//取appenders中的配置项level:appLogLevel}}}log4js.configure(config)//使用配置项returnlog4js.getLogger(name)//cheese参数值会在categories先找,如果没有,默认使用default对应的appender,信息输出到yyyyMMdd-out.log}log日志中间件开发(logger.js)exportdefault(options)=>{constcontextLogger={};ctx.logconst{env,appLogLevel,dir,serverIp,projectName}=Object.assign({},baseInfo,options||{});//取出常用配置(项目名,服务器请求IP)constcommonInfo={projectName,serverIp};constlogger=getLog({env,appLogLevel,dir},'奶酪');返回异步(ctx,下一个)=>{conststart=Date.now();//日志记录开始时间//将日志类型赋给ctx.log,后面中间件需要在特殊位置记录日志,可以直接使用ctx.log.error(err)记录不同类型的日志方法.forEach((method,i)=>{contextLogger[method]=(message)=>{logger[method](logInfo(ctx,message,commonInfo))}})ctx.log=contextLogger;//执行中间件awaitnext()//结束时间constresponseTime=Date.now()-start;//记录执行时间log??ger.infologger.info(logInfo(ctx,{responseTime:`响应时间为${responseTime/1000}s`},commonInfo))}}middlewareuse(app.js)importLogfrom'../log/logger';...app.use(Log({env:app.env,//koa提供的环境VariableprojectName:'back-API',appLogLevel:'debug',dir:'logs',serverIp:ip.address()}))其他特殊位置需要log记录使用ctx.log.error(err.stack);//记录错误日志ctx.log.info(err.stack);//记录信息日志ctx.log.warn(err.stack);//记录警告日志...运行截图log4js使用基础配置和流程分析设置配置settingitem,//配置项形式{appenders:{[customkey]:{}},categories:{}}//配置config:{appenders:{//每个属性都可以看做一个配置模块out:{type:'dateFile',//输出日志类型文件名:`log/task`,//输出日志路径格式:'-yyyy-MM-dd.log',//日志文件后缀(task-2019-03-08.log)...//具体配置见官网},error:{type:'dateFile',filename:'log/error',pattern:'-yyyy-MM-dd.log'',"alwaysIncludePattern":true},stdout:{type:'stdout'},//在控制台打印信息},//取出类别到log4js按需配置,返回配置的log4js对象,每个属性配置相当于不同的log4js配置对象入口;default为默认入口(getLogger()找不到入口时使用default)thelevelabovetraceLogdefault:{appenders:['stdout','out'],level:'trace'},//配置错误门入口,使用appenders中的'stdout','err'配置模块,记录错误级别以上的日志错误:{appenders:['err'],level:'error'}}}使用letlogger_out=log4js.getLogger('app');log4js.getLogger('app')查找具体的log4js对象过程:先根据app参数值在categories中搜索,没有找到app,然后默认使用默认对应的appenders进行配置,也就是会输出信息到log/task-yyyy-mm-dd.log文件,并将输出到控制台使用letlogger_out=log4js.getLogger('error');根据error参数的值在categories中查找,发现没有error的Configuration,然后会使用error对应的appenders进行配置,也就是将信息输出到log/error-yyyy-mm-dd.log文件,因为error配置项appenders中没有使用stdout模块,所以信息不会输出到console后期,考虑是否需要把log存入数据库并使日志持久化;考虑到记录后无法保留日志,可能不需要保留一个月或一周前的日志,需要开发设置定时自动删除过期日志文件(获取数据库日志记录)参考:log4js配置log4jsofNode.js完整讲解学无止境,积累点滴;化小为大简若本文对您有所收获,请常驻您的关爱之心!上一篇文章推荐:React中Git常用操作你知多少