根据Node-Red official documentation,我在settings.js文件中启用了自定义日志记录,如下所示
// Custom logger
myCustomLogger: {
level: 'debug',
metrics: true,
handler: function(settings) {
return function(msg) {
console.log(msg.timestamp, msg.event);
}
}
脚本工作正常并在控制台中打印调试语句和指标。我想了解更多如何应用创建文件以监视节点红色的日志功能?
答案 0 :(得分:0)
我知道这个帖子有点老了,但是因为有人问如何在 NodeRed 中使用 log4js,我刚刚完成了它。这是它的代码。 将此添加到 settings.js 中的日志记录部分:
myCustomLogger: {
level: "info",
handler: function(settings) {
var log4js = require("log4js");
log4js.configure({
appenders: {
everything: { type: 'dateFile', filename: '/Users/Media/Library/Logs/node-red.log', daysToKeep: 7 }
},
categories: {
default: { appenders: [ 'everything' ], level: 'all' }
}
});
var logger = log4js.getLogger();
return function(msg) {
var level='ALL'
switch(msg.level) {
case 10:
var level="FATAL";
break;
case 20:
var level="ERROR";
break;
case 30:
var level="WARN";
break;
case 40:
var level="INFO";
break;
case 50:
var level="DEBUG";
break;
case 60:
var level="TRACE";
break;
}
var add_msg=""
if (msg.type !== undefined) {
if (msg.name !== undefined) {
add_msg="[".concat(msg.type, ":", msg.name, "] ");
} else {
add_msg = "[".concat(msg.type, "] ");
}
} else if (msg.name !== undefined) {
add_msg = "[".concat(msg.name, "] ");
}
logger.log(level, add_msg.concat(msg.msg));
}
}
}
答案 1 :(得分:-1)
我怀疑你在日志文件中看到undefined
的原因是因为appendFile()函数是异步的,并且你的回调不正确。尝试将console.log(...)
函数替换为:
var text = msg.event + "\n";
fs.appendFileSync('message.txt', text, encoding='utf8');
(当然,您可能需要格式化msg.event中的文本,而不是仅使用默认的toString()函数)
请注意,每次写入新的日志条目时,您现在都会在节点红色中暂停主事件循环!这可能适用于开发,但您需要其他技术用于生产系统。您可能需要查看外部日志记录库,例如log4js for node ...