n8n 中的日志记录
日志记录是调试的重要功能。n8n 使用 winston 日志库。
日志流
n8n 自托管企业版除了本文档描述的日志选项外,还包含日志流功能。
设置
要在 n8n 中设置日志记录,您需要配置以下环境变量(也可以在配置文件中设置这些值)
配置文件中的设置 |
使用环境变量 |
描述 |
n8n.log.level |
N8N_LOG_LEVEL |
日志输出级别。可用选项(从低到高)为 error、warn、info 和 debug。默认值为 info 。您可以在此处了解更多关于这些选项的信息。 |
n8n.log.output |
N8N_LOG_OUTPUT |
日志输出位置。可用选项为 console 和 file 。多个值可以用逗号(, )分隔。默认使用 console 。 |
n8n.log.file.location |
N8N_LOG_FILE_LOCATION |
日志文件位置,仅在日志输出设置为文件时使用。默认使用 <n8nFolderPath>/logs/n8n.log 。 |
n8n.log.file.maxsize |
N8N_LOG_FILE_SIZE_MAX |
每个日志文件的最大大小(以 MB 为单位)。默认情况下,n8n 使用 16 MB。 |
n8n.log.file.maxcount |
N8N_LOG_FILE_COUNT_MAX |
保留的最大日志文件数量。默认值为 100。使用 workers 时应设置此值。 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | # 将日志级别设置为 'debug'
export N8N_LOG_LEVEL=debug
# 将日志输出设置为控制台和日志文件
export N8N_LOG_OUTPUT=console,file
# 设置日志文件的保存位置
export N8N_LOG_FILE_LOCATION=/home/jim/n8n/logs/n8n.log
# 设置每个日志文件的最大大小为 50 MB
export N8N_LOG_FILE_MAXSIZE=50
|
设置最多保留60个日志文件
export N8N_LOG_FILE_MAXCOUNT=60
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
37
38
39
40
41
42
43
44
45 | ### 日志级别
n8n 使用标准日志级别进行报告:
- `silent`:不输出任何内容
- `error`:仅输出错误信息
- `warn`:输出错误和警告信息
- `info`:包含有关进度的有用信息
- `debug`:最详细的输出级别。n8n 会输出大量信息以帮助调试问题。
## 开发指南
在开发过程中,添加日志消息是一个良好的实践。它有助于调试错误。要配置开发环境下的日志记录,请遵循以下指南。
### 实现细节
n8n 使用位于 `workflow` 包中的 `LoggerProxy` 类。通过传入 `Logger` 实例调用 `LoggerProxy.init()` 方法,可以在使用前初始化该类。
初始化过程只发生一次。[`start.ts`](https://github.com/n8n-io/n8n/blob/master/packages/cli/src/commands/start.ts) 文件已经为您完成了这个过程。如果您是从头开始创建新命令,则需要初始化 `LoggerProxy` 类。
一旦在 `cli` 包中创建了 `Logger` 实现,就可以通过调用导出模块中的 `getInstance` 便捷方法来获取它。
查看 [start.ts](https://github.com/n8n-io/n8n/blob/master/packages/cli/src/commands/start.ts) 文件以了解更多关于此过程的工作原理。
### 添加日志
一旦 `LoggerProxy` 类在项目中初始化完成,您就可以将其导入到任何其他文件中并添加日志。
为所有日志级别提供了便捷方法,因此可以使用格式 `Logger.<logLevel>('<message>', ...meta)` 在需要时添加新日志,其中 `meta` 表示除 `message` 外所需的任何附加属性。
在上面的示例中,我们使用了[上文](#log-levels)描述的标准日志级别。`message` 参数是一个字符串,`meta` 是一个数据对象。
```js
// 需要导入 LoggerProxy。我们将其重命名为 Logger 以简化使用
import {
LoggerProxy as Logger
} from 'n8n-workflow';
// 记录触发器函数的信息级别日志,附带工作流名称和工作流ID作为额外元数据属性
Logger.info(`工作流 "${workflow.name}" 的轮询触发器已启动`, {workflowName: workflow.name, workflowId: workflow.id});
|
创建新日志时,需要牢记以下有用的标准:
- 设计日志消息时要尽可能便于人类阅读。例如,始终用引号包裹名称。
- 在日志消息和元数据中重复信息(如上例中的工作流名称)可能很有用,因为消息更易于搜索,而元数据则便于过滤。
- 在所有日志中包含多个ID(例如
executionId
、workflowId
和 sessionId
)。
- 使用节点类型而非节点名称(或两者都用),这样更一致且更易于搜索。
前端日志
目前前端日志尚不可用。在 editor-ui
包中使用 Logger
或 LoggerProxy
会导致错误。此功能将在未来版本中实现。