【问题标题】:log4js for Node doesn't output to file, only to consoleNode 的 log4js 不输出到文件,只输出到控制台
【发布时间】: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


【解决方案1】:

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

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

干杯!

【讨论】:

  • 工作就像一个魅力,我仍然对异步编程感到困惑
【解决方案2】:

您可以使用 loggerWinston...我在我的 nodejs 应用程序中使用它,它工作正常。
您应该将它添加到您的 server.js(用于启动节点的文件)中

const winston = require('winston');

const tsFormat = () => (new Date()).toLocaleTimeString();
global.loggerWinston = new (winston.Logger)({
  transports: [
    // colorize the output to the console
    new (winston.transports.Console)({
      timestamp: tsFormat,
      colorize: true,
      level: 'debug'
    }),
    new (winston.transports.File)({
      filename: 'results.log',
      timestamp: tsFormat,
//      level: (process.env.NODE_ENV || 'development') === 'development' ? 'debug' : 'info'
      level: 'info'
    })
  ]
});

results.log 文件应该添加到您的项目文件夹中。

这是参考https://www.npmjs.com/package/winston

【讨论】:

  • 谢谢你的建议,我不知道这个库,我去看看它的特点。
  • @Fel 确定,让我知道它是否按您想要的方式工作:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
相关资源
最近更新 更多