Logging

Node-RED 使用记录器将其输出写入控制台。它还支持使用自定义 Logger 模块以允许将 output 发送到其他位置。

注意:如果您使用我们的安装脚本在 Raspberry Pi 上作为服务运行,则可以使用该命令查看服务日志 node-red-log

Console logger 控制台记录器

控制台记录器可以在设置文件中的属性下进行配置 logging

1
2
3
4
5
6
7
8
9
// Configure the logging output
logging: {
// Console logging
console: {
level: "info",
metrics: false,
audit: false
}
}

有 3 个属性用于配置 Logger 的行为:

level

要记录的日志记录级别。选项包括:

  • fatal- 只记录那些使应用程序不可用的错误
  • error- 记录被视为特定请求的致命错误
  • warn- 记录非致命问题
  • info- 记录有关应用程序一般运行的信息
  • debug- 记录比 info 更详细的信息
  • trace- 记录非常详细的日志记录
  • off- 完全没有日志消息

除此之外,每个级别都包含更高级别的消息 - 例如,level 将包含和分级消息。您可以在 Writing Functions 部分中找到有关如何记录到这些不同日志记录级别的 API 参考 off warn error fatal

metrics

当设置为 true 时,Node-RED 运行时将输出流执行和内存使用信息。

每个节点中接收和发送的事件将输出到日志中。例如,以下日志是从具有 inject 和 debug 节点的流输出的。

1
2
3
9 Mar 13:57:53 - [metric] {"level":99,"nodeid":"8bd04b10.813f58","event":"node.inject.receive","msgid":"86c8212c.4ef45","timestamp":1489067873391}
9 Mar 13:57:53 - [metric] {"level":99,"nodeid":"8bd04b10.813f58","event":"node.inject.send","msgid":"86c8212c.4ef45","timestamp":1489067873392}
9 Mar 13:57:53 - [metric] {"level":99,"nodeid":"4146d01.5707f3","event":"node.debug.receive","msgid":"86c8212c.4ef45","timestamp":1489067873393}

每 15 秒记录一次内存使用情况。

1
2
3
9 Mar 13:56:24 - [metric] {"level":99,"event":"runtime.memory.rss","value":97517568,"timestamp":1489067784815}
9 Mar 13:56:24 - [metric] {"level":99,"event":"runtime.memory.heapTotal","value":81846272,"timestamp":1489067784817}
9 Mar 13:56:24 - [metric] {"level":99,"event":"runtime.memory.heapUsed","value":59267432,"timestamp":1489067784817}

audit

设置为 true 时,将记录 Admin HTTP API 访问事件。该事件包括其他信息,例如正在访问的端点、IP 地址和时间戳。

如果启用,则事件将包含有关请求用户的信息. adminAuth

1
2
9 Mar 13:49:42 - [audit] {"event":"library.get.all","type":"flow","level":98,"path":"/library/flows","ip":"127.0.0.1","timestamp":1489067382686}
9 Mar 14:34:22 - [audit] {"event":"flows.set","type":"full","version":"v2","level":98,"user":{"username":"admin","permissions":"write"},"path":"/flows","ip":"127.0.0.1","timestamp":1489070062519}

自定义日志记录模块

也可以使用自定义日志记录模块。例如,输出可能会发送到单独的系统以监视系统的性能. 指标

要使用自定义 logger,请在 settings 文件的 logging 属性中添加一个新块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Configure the logging output
logging: {
// Console logging
console: {
level: "info",
metrics: false,
audit: false
},
// Custom logger
myCustomLogger: {
level: 'debug',
metrics: true,
handler: function(settings) {
// Called when the logger is initialised

// Return the logging function
return function(msg) {
console.log(msg.timestamp, msg.event);
}
}
}
}

属性与控制台日志记录相同 level metrics audit

该属性定义自定义日志记录处理程序。它是一个在启动时调用一次的函数,传入 Logger 的配置。它必须返回一个函数,该函数将与日志消息一起调用 处理器

可以配置多个自定义记录器 - 唯一保留的名称是 console

示例 Logger

以下示例添加一个自定义记录器,该记录器通过 TCP 连接将指标事件发送到 Logstash 实例。

这是一个非常快速和简单的示例 - 没有错误处理或重新连接逻辑。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
logging: {
console: {
level: "info",
metrics: false,
audit: false
},
logstash: {
level:'off',
metrics:true,
handler: function(conf) {
var net = require('net');
var logHost = '192.168.99.100',logPort = 9563;
var conn = new net.Socket();
conn.connect(logPort,logHost)
.on('connect',function() {
console.log("Logger connected")
})
.on('error', function(err) {
// Should attempt to reconnect in a real env
// This example just exits...
process.exit(1);
});
// Return the function that will do the actual logging
return function(msg) {
var message = {
'@tags': ['node-red', 'test'],
'@fields': msg,
'@timestamp': (new Date(msg.timestamp)).toISOString()
}
try {
conn.write(JSON.stringify(message)+"\n");
}catch(err) { console.log(err);}
}
}
}
}