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.fileSizeMax | N8N_LOG_FILE_SIZE_MAX | 每个日志文件的最大大小(以 MB 为单位)。默认情况下,n8n 使用 16 MB。 |
| n8n.log.file.fileCountMax | N8N_LOG_FILE_COUNT_MAX | 要保留的日志文件的最大数量。默认值为 100。在使用工作进程时应设置此值。 |
# Set the logging level to 'debug'
export N8N_LOG_LEVEL=debug
# Set log output to both console and a log file
export N8N_LOG_OUTPUT=console,file
# Set a save location for the log file
export N8N_LOG_FILE_LOCATION=/home/jim/n8n/logs/n8n.log
# Set a 50 MB maximum size for each log file
export N8N_LOG_FILE_SIZE_MAX=50
# Set 60 as the maximum number of log files to be kept
export N8N_LOG_FILE_COUNT_MAX=60
日志级别#
n8n 采用标准日志级别进行报告:
silent:完全不输出任何内容error:仅输出错误信息warn:输出错误及警告信息info:包含运行进度相关实用信息debug:最详细的输出级别。n8n 会输出大量信息以协助问题调试
开发指南#
在开发过程中,添加日志消息是良好的实践规范,能有效辅助错误调试。请按以下指南配置开发环境日志记录。
实现细节#
n8n 使用位于 workflow 包中的 LoggerProxy 类。通过传入 Logger 实例调用 LoggerProxy.init() 方法,可在使用前完成类的初始化。
该初始化过程仅需执行一次。start.ts 文件已自动完成此流程。若需从头创建新命令,则需手动初始化 LoggerProxy 类。
当 Logger 实现在 cli 包中创建后,可通过导出模块的 getInstance 便捷方法获取实例。
查阅 start.ts 文件可深入了解该流程的实现机制。
添加日志#
当 LoggerProxy 类在项目中完成初始化后,即可将其导入至任意文件并添加日志记录。
系统为所有日志级别提供了便捷方法,只需按 Logger.<日志级别>('<消息>', ...元数据) 格式即可随时添加新日志,其中 元数据 可包含除 消息 外的扩展属性。
上述示例采用前文所述的 标准日志级别。message 参数为字符串类型,meta 为数据对象。
// You have to import the LoggerProxy. We rename it to Logger to make it easier
import {
LoggerProxy as Logger
} from 'n8n-workflow';
// Info-level logging of a trigger function, with workflow name and workflow ID as additional metadata properties
Logger.info(`Polling trigger initiated for workflow "${workflow.name}"`, {workflowName: workflow.name, workflowId: workflow.id});
创建新日志记录器时,需遵循以下实用规范:
- 日志消息应尽可能便于人工阅读。例如:始终为名称添加引号
- 在日志消息和元数据中重复信息(如上例中的工作流名称)很有价值,既便于搜索消息内容,又可通过元数据实现高效筛选
- 所有日志中应包含多种标识符(例如
executionId、workflowId和sessionId) - 使用节点类型替代节点名称(或两者兼用),此举能保持一致性并提升搜索效率
前端日志#
目前暂不支持前端日志功能。在editor-ui包中使用Logger或LoggerProxy将引发错误。该功能将在未来版本中实现。