【发布时间】:2019-12-06 21:37:54
【问题描述】:
我需要一个用于 NodeJS 应用程序的基本日志系统,所以我正在使用 log4js 进行一些测试,这似乎是这些情况的标准。我需要将消息打印到控制台和文件,所以我写了这段代码:
// Logger
var log4js = require('log4js');
log4js.configure({
appenders: {
'console': { type: 'console' },
'file': { type: 'file', filename: 'logs/mailer.log' }
},
categories: {
default: { appenders: ['file', 'console'], level: 'DEBUG' },
}
});
var logger = log4js.getLogger("Mailer");
logger.info("Starting application");
try {
// CODE TO READ APP CONFIG FILE
}
catch(e) {
logger.error("Couldn't read app configuration file (config.yml)");
// This is the trouble maker. It kills the app without flushing the logs
process.exit(1);
}
当我运行应用程序时,日志显示如下:
[2019-07-29T16:07:24.763] [INFO] Mailer - Starting application
问题是我可以在控制台中看到消息,但日志文件仍然是空的。如果我删除它并再次运行应用程序,它就会创建,所以我认为问题是缺少选项或类似的东西。
有什么建议吗?
【问题讨论】:
-
我逐字使用了您的代码,它可以完美地写入文件。确保它没有在其他地方或类似地方打开。
-
我找到了问题的原因:打印错误消息后,我通过运行
process.exit(1);退出了应用程序,并且记录器似乎没有将消息刷新到文件中。我正在做一些研究,找到后我会发布解决方案。 -
是的,我猜记录器是异步写入的,所以当您在记录某些内容后立即终止进程时,它可能不会被保存。不过,您应该将此添加到您问题中的代码中,以便我们可以重现此内容。
标签: javascript node.js log4js-node