在使用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