Skip to content

n8n 中的日志记录#

日志记录是调试的重要功能。n8n 使用 winston 日志库。

日志流

n8n 自托管企业版除了本文档描述的日志选项外,还包含日志流功能。

设置#

要在 n8n 中设置日志记录,您需要配置以下环境变量(也可以在配置文件中设置这些值)

配置文件中的设置 使用环境变量 描述
n8n.log.level N8N_LOG_LEVEL 日志输出级别。可用选项(从低到高)为 error、warn、info 和 debug。默认值为 info。您可以在此处了解更多关于这些选项的信息。
n8n.log.output N8N_LOG_OUTPUT 日志输出位置。可用选项为 consolefile。多个值可以用逗号(,)分隔。默认使用 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(例如 executionIdworkflowIdsessionId)。
  • 使用节点类型而非节点名称(或两者都用),这样更一致且更易于搜索。

前端日志#

目前前端日志尚不可用。在 editor-ui 包中使用 LoggerLoggerProxy 会导致错误。此功能将在未来版本中实现。