Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点不使用log4js';t输出到文件,仅输出到控制台_Javascript_Node.js_Log4js Node - Fatal编程技术网

Javascript 节点不使用log4js';t输出到文件,仅输出到控制台

Javascript 节点不使用log4js';t输出到文件,仅输出到控制台,javascript,node.js,log4js-node,Javascript,Node.js,Log4js Node,我需要一个NodeJS应用程序的基本日志系统,所以我正在使用log4js进行一些测试,这似乎是这些情况的标准。我需要将消息打印到控制台和文件,因此我编写了以下代码: // Logger var log4js = require('log4js'); log4js.configure({ appenders: { 'console': { type: 'console' }, 'file': { type: 'file', filename: 'logs/mailer.log

我需要一个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
问题是我可以在控制台中看到消息,但日志文件仍然为空。如果我删除它并再次运行应用程序,它就会被创建,因此我认为问题在于缺少选项或类似的东西


有什么建议吗?

你可以使用loggerWinston…我在我的nodejs应用程序中使用了它,它工作得很好
您应该将其添加到server.js(用于启动节点的文件)中

应将results.log文件添加到项目文件夹中。


这是参考

为了避免更改应用程序逻辑和所有的
进程.exit()
调用,我将
文件
appender替换为其同步版本
文件同步
,现在一切正常。因此,我唯一更改的是声明“file”appender的行:

    'file': { type: 'fileSync', filename: 'logs/mailer.log' }

干杯

我一字不差地使用了您的代码,它可以完美地写入文件。确保它没有在其他地方或类似地方打开。我找到了问题的原因:在打印错误消息后,我通过运行
process.exit(1)退出了应用程序,并且记录器似乎没有将消息刷新到文件中。我正在做一些研究,找到解决方案后会发布。是的,我想日志记录器是异步写入的,所以当您在记录某个内容后立即终止进程时,它可能不会被保存。不过,您应该将其添加到问题中的代码中,以便我们可以复制它。谢谢您的建议,我不知道这个库,我会看看它的功能。@Fel-sure,如果它按您希望的方式工作,请告诉我:)
    'file': { type: 'fileSync', filename: 'logs/mailer.log' }