log4js 日志加上行数和文件名

2021-01-26  本文已影响0人  zhumu3

在使用log4js打印日志的时候,我们需要打印对应的行数以及对应文件名的话,在网上没找到,所以就去了log4js的github链接,在百般尝试之后,终于在issue中找到了答案,现在将解决方法公布一下,应该是log4js在19年发布了一个版本开始支持打印行数和文件名的。

1.主要就是在appenders中配置layout,其中的配置项的含义如下,我直接摘抄自https://log4js-node.github.io/log4js-node/layouts.html

*   `%r` time in toLocaleTimeString format
*   `%p` log level
*   `%c` log category
*   `%h` hostname
*   `%m` log data
*   `%d` date, formatted - default is `ISO8601`, format options are: `ISO8601`, `ISO8601_WITH_TZ_OFFSET`, `ABSOLUTE`, `DATE`, or any string compatible with the [date-format](https://www.npmjs.com/package/date-format) library. e.g. `%d{DATE}`, `%d{yyyy/MM/dd-hh.mm.ss}`
*   `%%` % - for when you want a literal `%` in your output
*   `%n` newline
*   `%z` process id (from `process.pid`)
*   `%f` full path of filename (requires `enableCallStack: true` on the category, see [configuration object](https://log4js-node.github.io/log4js-node/api.html))
*   `%f{depth}` path’s depth let you chose to have only filename (`%f{1}`) or a chosen number of directories
*   `%l` line number (requires `enableCallStack: true` on the category, see [configuration object](https://log4js-node.github.io/log4js-node/api.html))
*   `%o` column postion (requires `enableCallStack: true` on the category, see [configuration object](https://log4js-node.github.io/log4js-node/api.html))

翻译一下,我们需要的就是%f{depth},%l,%o,分别是文件名、行数、列数,其中在type为stdout中配置的pattern是控制台输出的日志模板,type为datefile是日志文件的日志模板。

2.接着配置一下enableCallStack: true

栗子如下:

log4js.configure({
   appenders: {
    out: {
      type: 'stdout',
      layout: {
        type: 'pattern',
        pattern: '%[[%d] [%p] [%f{2}:%l] %m'
      }
    },
    app: {
      type: 'dateFile',
      keepFileExt: true,
      daysToKeep: 20,
      layout: {
        type: 'pattern',
        pattern: '%[[%d] [%p] [%f{2}:%l] %m'
      }
    },
  },
  categories: {
    default: {
      appenders: ['out', 'app'],
      level: 'debug',
      enableCallStack: true
    }
  }
});

3.最后就看到我们打的日志已经加上文件名和行数了


image.png
上一篇下一篇

猜你喜欢

热点阅读