[英]log4js for Node doesn't output to file, only to console
我需要一个log4js
应用程序的基本日志系统,所以我正在用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()
调用,我已将file
附加程序替换为其同步版本fileSync
,现在一切都按预期工作。 所以,我唯一改变的是我声明“文件”附加程序的行:
'file': { type: 'fileSync', filename: 'logs/mailer.log' }
干杯!
您可以使用 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.