我希望我的node.js项目生成类似于log4j格式的日志文件,每个日志行都以文件名和js函数名开头,指示日志请求的来源。
例如: 如果我的js文件名为aNiceFile.js,我的js函数名为doImportantStuff(),我使用类似以下语句调用日志记录:
我希望我的日志文件看起来像这样:
我希望进行大量日志记录,因此我不介意一次性的前期工作来设置它,但是我希望每添加一个文件/函数时只需最少的额外工作量。今天我正在使用Winston,如果必要的话,我很乐意切换到其他东西,但是在使用Winston时,似乎需要我做出一些努力才能实现这一点:https://github.com/winstonjs/winston/issues/200。为了完整起见,我不需要行号,但也很好有。我的当前笨拙解决方法是:在每个文件中加入以下内容以获取当前文件名:
我很满意这一步,它并不繁琐,只需在每个文件顶部粘贴一行相同的文本即可,我可以接受这个。
2) 为了获取当前函数名称,请在每个函数前加上这行代码:
我不喜欢这一步骤,我必须将函数名复制到字符串常量中,如果以后重命名该函数,则可能会失步。
如果我能将其转换为下面的版本,那就更好了,但我不确定如何做到这一点:
我不喜欢这一步,因为我的所有日志语句都以此(${sn}:${fn})开头。
正如你所看到的,这很原始,但确实有效。我真正应该在这里做什么?
我对性能很感兴趣,因此需要生成错误对象来从中获取堆栈跟踪的解决方案可能不可接受。
例如: 如果我的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。为了完整起见,我不需要行号,但也很好有。我的当前笨拙解决方法是:在每个文件中加入以下内容以获取当前文件名:
const sn = path.basename(__filename) // this script file name, used for logging purposes
我很满意这一步,它并不繁琐,只需在每个文件顶部粘贴一行相同的文本即可,我可以接受这个。
2) 为了获取当前函数名称,请在每个函数前加上这行代码:
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})开头。
正如你所看到的,这很原始,但确实有效。我真正应该在这里做什么?
我对性能很感兴趣,因此需要生成错误对象来从中获取堆栈跟踪的解决方案可能不可接受。