在thinkjs3中使用自定义日志来满足项目需求

思路就是,先查看think-logger3 file, datefile, basic的实现方式,自己在上面加以改造(think-logger的 底层实现就是log4js)

先自定义一个日志handler, 代码如下:

controller/myHandle.js

    const log4js = require('log4js')
    const _logger = Symbol('_logger')

    log4js.addLayout('json', function(config) {
      return function(logEvent) { 
        return JSON.stringify(logEvent.data[0]) + config.separator
      }
    })

    module.exports = class {
      /**
      * @param {Object}  config  {}  配置传入的参数
      */
      constructor(config) {
        // console.log('=========', config)
        this[_logger] = {};
        const logConfig = this.formatConfig(config);
        this.setLogger(logConfig);
      }

      debug(...args) {
        return this[_logger].debug(...args);
      }

      info(...args) {
        <!--如果你不需要系统的info日志也被记录到日志文件中,可以将这行代码注释-->
        return this[_logger].info(...args)
      }

      warn(...args) {
        return this[_logger].warn(...args);
      }

      error(...args) {
        return this[_logger].error(...args);
      }

      configure(config) {
        return log4js.configure(config);
      }

      setLogger(config, category) {
        this.configure(config);
        this[_logger] = log4js.getLogger(category);
      }

      formatConfig(config) {
        let {level, filename, pattern, alwaysIncludePattern, absolute, layout} = config;
        level = level ? level.toUpperCase() : 'ALL';

        return Object.assign({
          appenders: {
            dateFile: {type: 'dateFile', filename, pattern, alwaysIncludePattern, absolute, layout}
          },
          categories: {
            default: {appenders: ['dateFile'], level}
          }
        }, config);
      }
    }
复制代码

formatConfig 这个方法里面你可以实现自己想要的格式,因为我需要输出日期文件,所以我直接将think3-logger里面dateFile的实现方式直接copy过来了(就是懒哈!)

然后在adapter.js中进行配置, 如下: 有些时候,一些基本的功能满足不了我们,log4js允许我们自定义layout, 自定义的layout可以查看log4js文档自定义文档,我这里主要是需要将日志已json的方式输入到日志文件中。

config/adapter.js

    exports.logger = {
      type: 'customLog',
      customLog: {
        handle: MyHandle,
        appenders: {
          log: {
            type: 'dateFile',
            filename: path.join(think.ROOT_PATH, 'logs/app.log'),
            pattern: '.yyyy-MM-dd',
            layout: {
              type: 'json',
              separator: ','
            }
          }
        },
        categories: {
          default: { appenders: ['log'], level: 'info' }
        }
      }
    }
复制代码

在需要记录日志的地方直接引入使用就好:

    const log4js = require('log4js')
    const logger = log4js.getLogger()
    logger.info('你需要记录的数据')
复制代码

第一次写文章,如果写的不对的地方,欢饮随时指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值