Koa日志中心件封装开发的办法介绍
本篇文章给大家带来的内容是关于Koa日志中心件封装开发的办法介绍,有必然的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。
关于一个效劳器利用来说,日志的记载是必不成少的,我们需要使用其记载项目程序每天都做了什么,什么时候发生过错误,发生过什么错误等等,便于往后回忆、实时把握效劳器的运转状态,复原问题场景。
日志的作用
记载效劳器程序运转状态;帮忙开发者快速捕捉错误,定位乃至决解故障。
日志中心件开发工具log4js
在node傍边没有自带的日志模块,所以需要使用第三方模块使用模块:log4js安置: npm i log4js -Slogsjs官方文档
日志分类:
拜访日志: 记载客户端对项目的拜访,主如果 http 恳求。用于帮忙改善和晋升网站的机能和会员体验;利用日志: 项目标志和记载位置打印的日志,包罗显现非常状况,利便查询项目的运转状态和定位bug(包括了debug、info、warn 和 error等级别)。
日志等级
假如配置了日志等级,则其只能记载日志等级比设定的更高级别的日志信息日志等级图
如配置level: 'error',则只能输出error,fatar,mark级别的日志信息
日志中心件开发
设定需要日志需要记载的信息段(log_info.js)
export default (ctx, message, commonInfo) => { const { method, // 恳求办法 url, // 恳求链接 host, // 发送恳求的客户端的host headers // 恳求中的headers } = ctx.request; const client = { method, url, host, message, referer: headers['referer'], // 恳求的源地址 userAgent: headers['user-agent'] // 客户端信息 设备及阅读器信息 } return JSON.stringify(Object.assign(commonInfo, client)); }
- 设定通用猎取配置后的log4js对象(logger.js)
const getLog = ({env, appLogLevel, dir}, name) => { //log4js根本说明配置项,可自定义设定键名,用于categories.appenders自定义拔取 let appenders = { // 自定义配置项1 cheese: { type: 'dateFile', //输出日志类型 filename: `${dir}/task`, //输出日志途径 pattern: '-yyyy-MM-dd.log', //日志文件后缀名(task-2019-03-08.log) alwaysIncludePattern: true } } // 假如为开发环境配置在操纵台上打印信息 if (env === "dev" || env === "local" || env === "development") { // 自定义配置项2 appenders.out = { type: "stdout" } } // log4js配置 let config = { appenders, //作为getLogger办法猎取log对象的键名,default为默许使用 categories: { default: { appenders: Object.keys(appenders), // 取appenders中的说有配置项 level: appLogLevel } } } log4js.configure(config) //使用配置项 return log4js.getLogger(name)// 这个cheese参数值先会在categories中寻,寻不到就会默许使用default对应的appenders,信息会输出到yyyyMMdd-out.log }
- log日志中心件开发(logger.js)
export default (options) => { const contextLogger = {}; //后期赋值给ctx.log const { env, appLogLevel, dir, serverIp, projectName } = Object.assign({}, baseInfo, options || {}); // 取出通用配置(项目名,效劳器恳求IP) const commonInfo = { projectName, serverIp }; const logger = getLog({env, appLogLevel, dir},'cheese'); return async (ctx, next) => { const start = Date.now(); //日志记载开端时间 // 将日志类型赋值ctx.log,后期中心件非凡位置需要记载日志,可直接使用ctx.log.error(err)记载不一样类型日志 methods.forEach((method, i) => { contextLogger[method] = (message) => { logger[method](logInfo(ctx, message, commonInfo)) } }) ctx.log = contextLogger; // 施行中心件 await next() // 完毕时间 const responseTime = Date.now() - start; // 将施行时间记载logger.info logger.info(logInfo(ctx, { responseTime: `响应时间为${responseTime/1000}s` }, commonInfo) ) } }
- 中心件使用(app.js)
import Log from '../log/logger'; ... app.use(Log({ env: app.env, // koa 供给的环境变量 projectName: 'back-API', appLogLevel: 'debug', dir: 'logs', serverIp: ip.address() }))
- 其他非凡位置需要日志记载使用
ctx.log.error(err.stack); //记载错误日志 ctx.log.info(err.stack); // 记载信息日志 ctx.log.warn(err.stack); // 记载警告日志 ...
- 运转截图
log4js使用根本配置和流程解析
- 设定配置项,
// 配置项情势 { appenders:{ [自定义key]:{} }, categories:{ } } // 配置 config: { appenders:{ // 每一个属性可以看作为一个配置模块 out: { type: 'dateFile', //输出日志类型 filename: `log/task`, //输出日志途径 pattern: '-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' }, //在操纵台上打印信息 }, // 通过categories来取出给log4js按需配置,返回配置后的log4js对象,每个属性配置相当于一个不一样的log4js配置对象入口;default为默许入口(getLogger()寻不到入口时默许使用default) categories:{ // 配置默许入口,使用appenders中的'stdout','out'配置模块,记载trace以上等级日志 default: { appenders: ['stdout','out'], level: 'trace' }, // 配置error门入口,使用appenders中的'stdout','err'配置模块,记载error以上等级日志 error : {appenders: ['err'], level: 'error'} } }
使用let logger_out = log4js.getLogger('app');
log4js.getLogger('app')查寻特定log4js对象流程:先按照app参数值在categories中寻,发明没有app,然后就会默许使用default对应的appenders停止配置,即信息会输出到log/task-yyyy-mm-dd.log文件中,并且会输出到操纵台
使用let logger_out = log4js.getLogger('error');
按照error参数值在categories中寻,发明没有具有error配置,然后就会使用error对应的appenders停止配置,即信息会输出到log/error-yyyy-mm-dd.log文件中,由于error的配置项appenders中没有使用stdout模块,所以信息不会输出到操纵台
后期思考
可否需要对日志停止数据库储备,停止日志耐久化;思考到不成能对日志记载后不断留存,关于一个月或者一周之前的日志大概没有必要在停止储备了,需要开发设定按时主动删除过期日志文件(获数据库日志记载)
以上就是Koa日志中心件封装开发的办法介绍的具体内容,更多请关注百分百源码网其它相关文章!