百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>JS教程> Koa日志中心件封装开发的办法介绍
分享文章到:

Koa日志中心件封装开发的办法介绍

发布时间:09/01 来源:未知 浏览: 关键词:

本篇文章给大家带来的内容是关于Koa日志中心件封装开发的办法介绍,有必然的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。

关于一个效劳器利用来说,日志的记载是必不成少的,我们需要使用其记载项目程序每天都做了什么,什么时候发生过错误,发生过什么错误等等,便于往后回忆、实时把握效劳器的运转状态,复原问题场景。

日志的作用

记载效劳器程序运转状态;帮忙开发者快速捕捉错误,定位乃至决解故障。

日志中心件开发工具log4js

在node傍边没有自带的日志模块,所以需要使用第三方模块使用模块:log4js安置: npm i log4js -Slogsjs官方文档

日志分类:

拜访日志: 记载客户端对项目的拜访,主如果 http 恳求。用于帮忙改善和晋升网站的机能和会员体验;利用日志: 项目标志和记载位置打印的日志,包罗显现非常状况,利便查询项目的运转状态和定位bug(包括了debug、info、warn 和 error等级别)。

日志等级

假如配置了日志等级,则其只能记载日志等级比设定的更高级别的日志信息日志等级图

565053578-5c81f1f98d71b_articlex.png

如配置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));
}
  1. 设定通用猎取配置后的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
}
  1. 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)
        )
    }
}
  1. 中心件使用(app.js)
import Log from '../log/logger';
...
app.use(Log({
        env: app.env,  // koa 供给的环境变量
        projectName: 'back-API',
        appLogLevel: 'debug',
        dir: 'logs',
        serverIp: ip.address()
    }))
  1. 其他非凡位置需要日志记载使用
ctx.log.error(err.stack); //记载错误日志
ctx.log.info(err.stack); // 记载信息日志
ctx.log.warn(err.stack); // 记载警告日志
...
  1. 运转截图

4088842642-5c81f45ecd311_articlex.png

log4js使用根本配置和流程解析

  1. 设定配置项,
// 配置项情势
{
    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日志中心件封装开发的办法介绍的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板