在node项目中使用log4js记录日志
[ 2019/10/30, NodeJs , 3457阅, 1评 ]

本文所说的log4js实际上是指log4js-node,它是log4js到node.js的移植。

安装:npm i log4js -S,基本配置与使用方法可见其官方网站与文档

顾名思义,其输出级别level为:trace < debug < info < warn < error < fatal,当设置为info时,会输出info及其之后的级别日志;当设置为trace或all时,所有级别都将输出。

注意:categories中至少要把default给配置上,否则无法使用。

简单应用如下:

const log4js = require('log4js')

log4js.configure({
  appenders: {
    out: {
      //设置控制台输出
      type: 'console'
    },
    spiderLog: {
      type: 'dateFile',
      filename: './logs/spiderLog',
      pattern: '.yyyy-MM-dd.log',
      alwaysIncludePattern: true
    },
    testLog: {
      type: 'dateFile',
      filename: './logs/testLog',
      pattern: '.yyyy-MM-dd.log',
      alwaysIncludePattern: true
    }
  },
  categories: {
    default: {
      appenders: ['out', 'spiderLog'],
      level: 'all'
    },
    testCat: {
      appenders: ['out', 'testLog'],
      level: 'info'
    }
  }
})

const logger = log4js.getLogger()

// logger.trace('追踪级别')
// logger.debug('调试级别')
// logger.info('信息级别')
// logger.warn('警告级别')
// logger.error('错误级别')
// logger.fatal('致命错误级别')

export const loggerTest = log4js.getLogger('testCat')

export default logger

结果如图:

log4js记录日志1.jpg

log4js记录日志2.jpg

在koa.js项目中使用

在koa.js项目中可使用koa-log4js(npm i koa-log4 -S),作者对它进行了改造以支持“记录所有访问级别的日志”,而其他配置或用法仍与log4js一致。

新建一个logger.js文件内容如下:

const path = require('path');
const log4js = require('koa-log4');

log4js.configure({
  appenders: {
    access: {
      type: 'dateFile',
      filename: path.join('logs/', 'access'),
      pattern: '-yyyy-MM-dd.log',
      alwaysIncludePattern: true
    },
    application: {
      type: 'dateFile',
      filename: path.join('logs/', 'application'),
      pattern: '-yyyy-MM-dd.log',
      alwaysIncludePattern: true
    },
    out: {
      type: 'console'
    }
  },
  categories: {
    default: {
      appenders: ['out'],
      level: 'info'
    },
    access: {
      appenders: ['access'],
      level: 'info'
    },
    application: {
      appenders: ['application'],
      level: 'warn'
    }
  }
})

//记录所有访问级别的日志
exports.accessLogger = () => log4js.koaLogger(log4js.getLogger('access'))
//记录所有应用级别的日志
exports.logger = log4js.getLogger('application')

记录所有访问级别的日志

const Koa = require('koa')
const app = new Koa()

const { accessLogger } = require('./app/logger')
app.use(accessLogger())
// ...

假如你也有一个处理错误信息的中间件

const { logger } = require('../logger')

module.exports = async (ctx, next) => {
  try {
    await next()
  } catch (e) {
    logger.error(e)
    ctx.status = 200
    ctx.body = {
      code: e.status === 401 ? 555 : -1,
      msg: e && e.message ? e.message : e.toString()
    }
  }
}

有朋自远方来...评论一下呗O(∩_∩)O

  • 评论(1)

    广州中专学校 [ 回复 ]
    2020-01-07 20:19

    网站内容还是挺不错的,谢谢博主。还有博客应该是WORDPRESS做的吧,感觉美观度还可以提高,谢谢。