使用 Node.js 的 Winston 模块正确记录到文件
Correct logging to file using Node.js's Winston module
我正在使用 Winston 将日志记录到控制台和文件。如果我指定一个格式化程序并且记录的消息与前一个相同,则文件日志只写入一次。在其他情况下(未指定格式化程序或写入控制台)日志记录按预期工作。
这是简化的代码:
var winston = require('winston');
function formatter(args) {
return "some formatting: " + args.message;
}
var weirdLogger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({
json: false,
formatter: formatter
}),
new (winston.transports.File)({
filename: "weirdLogger.csv",
json: false,
formatter: formatter
})
]
});
var workingLogger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({
json: false
}),
new (winston.transports.File)({
filename: "workingLogger.csv",
json: false
})
]
});
var weirdLogTest = function () {
weirdLogger.info("test1");
workingLogger.info("test2");
};
var expectedBehaviorLogTest = function () {
weirdLogger.info("test1: " + new Date().getTime());
workingLogger.info("test2: " + new Date().getTime());
};
setInterval(weirdLogTest, 5000);
//setInterval(expectedBehaviorLogTest, 5000);
如所写,此代码显示 test1 和 test2 每五秒记录一次到控制台,并且 workingLogger.csv
正在更新,但 weirdLogger.csv
不是。注释掉 setInterval(weirdLogTest, 5000);
并在 expectedBehavior 测试中注释表明,当日期附加到每个日志时,日志记录按预期发生。
我在文档中找不到任何关于忽略重复消息或其他可以解释这一点的内容。关于我做错了什么的任何想法?这可能是一个错误,但我不想排除用户错误的可能性。
这已被确认为 bug,这不是由格式化程序引起的,而是因为我的格式化日志输出太短了。有一个修复程序将被合并。
我正在使用 Winston 将日志记录到控制台和文件。如果我指定一个格式化程序并且记录的消息与前一个相同,则文件日志只写入一次。在其他情况下(未指定格式化程序或写入控制台)日志记录按预期工作。
这是简化的代码:
var winston = require('winston');
function formatter(args) {
return "some formatting: " + args.message;
}
var weirdLogger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({
json: false,
formatter: formatter
}),
new (winston.transports.File)({
filename: "weirdLogger.csv",
json: false,
formatter: formatter
})
]
});
var workingLogger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({
json: false
}),
new (winston.transports.File)({
filename: "workingLogger.csv",
json: false
})
]
});
var weirdLogTest = function () {
weirdLogger.info("test1");
workingLogger.info("test2");
};
var expectedBehaviorLogTest = function () {
weirdLogger.info("test1: " + new Date().getTime());
workingLogger.info("test2: " + new Date().getTime());
};
setInterval(weirdLogTest, 5000);
//setInterval(expectedBehaviorLogTest, 5000);
如所写,此代码显示 test1 和 test2 每五秒记录一次到控制台,并且 workingLogger.csv
正在更新,但 weirdLogger.csv
不是。注释掉 setInterval(weirdLogTest, 5000);
并在 expectedBehavior 测试中注释表明,当日期附加到每个日志时,日志记录按预期发生。
我在文档中找不到任何关于忽略重复消息或其他可以解释这一点的内容。关于我做错了什么的任何想法?这可能是一个错误,但我不想排除用户错误的可能性。
这已被确认为 bug,这不是由格式化程序引起的,而是因为我的格式化日志输出太短了。有一个修复程序将被合并。