宝哥软件园

Koa日志中间件包开发详解

编辑:宝哥软件园 来源:互联网 时间:2021-08-27

对于服务器应用程序,日志记录是必不可少的。我们需要用它来记录项目程序每天做了什么,什么时候发生了什么错误等等。以便日后实时查看和掌握服务器的运行状态,还原问题场景。

日志的作用

记录服务器程序运行状态;帮助开发人员快速捕获错误,定位并解决故障。日志中间件开发工具log4js

节点中没有日志模块,所以需要使用第三方模块:log4js安装:NPM I log4js-S logsjss官方文档日志分类:访问日志:记录客户端对项目的访问,主要是http请求。用于帮助提高网站的性能和用户体验;应用日志:打印在项目标记和记录位置的日志,包括异常情况,便于查询项目运行状态和定位bug(包括调试、信息、警告和错误级别)。日志级别

如果配置了日志级别,它只能以比设置的日志级别更高的日志级别记录日志信息日志级别图表

如果配置了级别:“错误”,则只能输出错误、fatar、标记标记级别日志信息

日志中间件开发

设置需要记录在日志中的信息段(log_info.js)

Exportdefault (CTX,消息,commoninfo)={const {method,//request method url,//request link host,//发送请求的客户端的主机头//request中的头}=ctx.requestconst client={ method,url,host,message,refer : headers[' refer '],//请求的源地址为usergents : headers[' user-agent ']//客户端信息设备和浏览器信息} return JSON . stringfy(object . assign(common info,client));}在常规采集配置后设置log4js对象(logger.js)

Const getlog=({env,applog level,dir},name)={//log4j s基本描述配置项,可自定义设置键名。用于自定义选择类别. appenders .让appenders={//自定义配置项1chese: {type3360' datefile ',//输出日志类型filename 3360 ` $ { dir }/task `,//输出日志路径模式: '-yyyy-MM-dd.log ',//日志文件后缀(task-2019-03-08 . log)always include part an 3360 true } }//如果开发环境配置为在控制台上打印信息if (envout={ type : ' stdout ' }//log4j s配置let config={appenders,//获取日志对象的键名作为getLogger方法。Default使用类别: { default : { appenders : }对象。钥匙(附加器)。//取配置项级别: applog level } } } log4j s . config(config)在appenders中//使用配置项返回log4js.getLogger(name)//这个cheese参数值会先在categories中找到。如果没有找到,默认使用默认对应的追加器,信息输出到yyymmdd-out . log }日志中间件开发(logger.js)

导出默认值(选项)={ const contextLogger={ };//将其分配给CTX.logconst {env,apploglevel,dir,serverip,projectname}=object.assign ({},baseinfo,options | | { });//取出一般配置(项目名称、服务器请求IP)const common info={项目名称、服务器IP };const logger=getLog({env,appLogLevel,dir},' cheese ');返回异步(ctx,next)={ const start=date . now();//日志记录开始时间//将日志类型赋给ctx.log在后期,中间件的特殊位置需要记录日志。可以直接使用ctx.log.error(err)记录不同类型的日志方法. forEach((method,I)={ context logger[method]=(message)={ logger[method](logInfo(CTX,message,commonInfo))})CTX . log=context logger;//执行中间件wait next() //end time const响应时间=日期。now()-start;//记录执行时间logger . info logger . info(loginfo(CTX,{responsetime : `响应时间为$ {responsetime/1000} s `},commoninfo))}}中间件使用(app.js)

'从导入日志'./log/logger ';使用(log ({env:app.env,//KOA提供的环境变量projectname3360' back-API '、applog level3360' debug '、dir3360' logs '、serverip3360ip.address ()})等特殊地方需要日志记录)

CTX . log . error(err . stack);//记录错误日志CTX . log . info(err . stack);//记录信息日志CTX . log . warn(err . stack);//记录警告日志.运行截图

Log4js使用基本配置和流程解析

设置配置项目,

//配置项表单{ Appenders : {[自定义键]:{},categories : { }//配置config : { Appenders 3360 {//每个属性都可以看作配置模块out3360 {type:' date file ',//输出日志类型filename: `log/task,//输出日志路径pattern:'-yyyy-mm-dd.log ',//日志文件的后缀名称(task-220.//具体配置见官网}、错误: {type:' date file '、文件名: ' log Pattern : '-yyyy-mm-DD . log '、alwaysinclude Pattern ' : true }、stdout3360 {type:' stdout'}、//在控制台上打印信息}、//从类别中检索并根据需要为log4j进行配置,返回配置好的log4j对象。Default是默认条目(当getLogger()找不到条目时使用default)categories : {//配置默认条目,在appenders中使用' stdout ',' out '和' out '配置模块。在trace上面记录级别日志:default : { appenders :[' stdout ',' out'],level:' trace'},//配置错误门入口,在appenders中使用' stdout ',' err '配置模块。使用let logger _ out=log4j s . getlogger(' app ')记录上述日志错误:error : { appenders :[' err '],level: ' error ' } }

Log4js.getLogger('app ')搜索特定的Log4js对象:首先根据app参数值进行分类搜索,发现没有app,那么默认会使用默认对应的appenders进行配置,也就是将信息输出到log/task-yyyy-mm-dd.log文件,并输出到控制台。

使用let logger _ out=log4j s . getlogger(' error ');

根据error参数的值,我们发现没有错误配置,然后使用error对应的appenders进行配置,也就是将信息输出到log/error-yyyy-mm-dd.log文件,因为错误配置项的appenders中没有使用stdout模块,所以信息不会输出到控制台

延迟考虑

是否有必要将日志存储在数据库中并持久化;

考虑到记录后不可能一直保存日志,可能不需要保存一个月或一周前的日志,所以需要开发设置,定期自动删除过期的日志文件(获取数据库日志记录)

更多资讯
游戏推荐
更多+