Node-RED中的自定义文件记录

时间:2018-01-31 12:28:49

标签: node.js node-red

根据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);
            }
        }

脚本工作正常并在控制台中打印调试语句和指标。我想了解更多如何应用创建文件以监视节点红色的日志功能?

2 个答案:

答案 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 ...