【发布时间】:2018-03-14 08:23:59
【问题描述】:
我希望我的 node.js 项目生成有点类似于 log4j 格式的日志文件,因为我希望每个日志行都以日志请求的文件名和 js 函数名开头。
例如: 如果我的 js 文件称为 aNiceFile.js 并且我的 js 函数称为 doImportantStuff() 并且我使用以下内容调用日志语句:
log.info('About to start on the important stuff')
我希望我的日志文件看起来有点像:
2018-03-14 06:33:26:619 INFO aNiceFile.js doImportantStuff() About to start on the important stuff.
我想做很多日志记录,所以我不介意预先设置它,但我在添加到我的代码中的每个文件/函数的额外工作量最少。
我今天正在使用Winston,如果有必要,我很高兴切换到其他东西,对于 Winston,如果不付出我的努力,这似乎是不可能的:https://github.com/winstonjs/winston/issues/200
为了完整起见,我不需要行号,但如果有它们也不错。
我目前笨拙的工作是:
1) 以此开始每个文件以获取当前文件名:
const sn = path.basename(__filename) // this script file name, used for logging purposes
这一步我没问题,不繁琐,在每个文件的顶部粘贴一行相同的行,我可以接受。
2) 以 this 启动每个函数以获取当前函数名:
const fn = '<I copy/paste the function name into this string constant :( >'
我不喜欢这一步,我必须将函数名复制到字符串常量中,如果我重命名函数,以后可能会不同步。
如果我能把它变成下面的版本会更好,不知道该怎么做:
const fn = getCurrentFunctionName()
3) 我这样写每个日志语句:
log.info(`${sn}:${fn} Starting important stuff`)
我不喜欢这一步,因为我所有的日志语句都以这个 (${sn}:${fn}) 噪音开头。
如您所见,这是原始的,但确实有效。我真的应该在这里做什么?
我对性能感兴趣,因此需要生成 Error 对象以从中获取堆栈跟踪的解决方案可能是不可接受的。
【问题讨论】:
标签: javascript node.js logging winston