NocoBase 提供了一个基于 pino 的高性能日志系统。在任意拥有 context 的地方,都可以通过 ctx.logger 获取日志实例,用于记录插件或系统运行时的关键日志。
这些方法对应不同的日志级别(从高到低):
| 级别 | 方法 | 说明 |
|---|---|---|
fatal | ctx.logger.fatal() | 致命错误,通常导致程序退出 |
error | ctx.logger.error() | 错误日志,表示请求或操作失败 |
warn | ctx.logger.warn() | 警告信息,提示潜在风险或非预期情况 |
info | ctx.logger.info() | 常规运行信息 |
debug | ctx.logger.debug() | 调试信息,用于开发环境 |
trace | ctx.logger.trace() | 详细跟踪信息,通常用于深度诊断 |
每条日志输出均为结构化 JSON 格式,默认包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
level | number | 日志级别 |
time | number | 时间戳(毫秒) |
pid | number | 进程 ID |
hostname | string | 主机名 |
msg | string | 日志消息 |
| 其他 | object | 自定义上下文信息 |
示例输出:
ctx.logger 会自动注入上下文信息,例如当前插件、模块或请求来源,使日志能更准确地追踪来源。
输出示例(带上下文):
你可以在插件中创建自定义的 logger 实例,继承或扩展默认配置:
子 logger 会继承主 logger 的配置并自动附加上下文。
Pino 的日志级别遵循从高到低的数值定义,数值越小,优先级越低。
以下是完整的日志级别划分表:
| 等级名称 | 数值 | 方法名 | 说明 |
|---|---|---|---|
fatal | 60 | logger.fatal() | 致命错误,通常导致程序无法继续运行 |
error | 50 | logger.error() | 一般错误,表示请求失败或操作异常 |
warn | 40 | logger.warn() | 警告信息,提示潜在风险或非预期情况 |
info | 30 | logger.info() | 普通信息,记录系统状态或正常操作 |
debug | 20 | logger.debug() | 调试信息,用于开发阶段分析问题 |
trace | 10 | logger.trace() | 详细跟踪信息,用于深入诊断 |
silent | -Infinity | (无对应方法) | 关闭所有日志输出 |
Pino 只会输出大于或等于当前 level 配置的日志。例如,当日志级别为 info 时,debug 和 trace 的日志将被忽略。
使用上下文日志
在插件、模型或应用上下文中使用 ctx.logger,可自动携带来源信息。
区分日志级别
error 记录业务异常info 记录状态变化debug 记录开发调试信息避免过量日志
尤其在 debug 与 trace 级别下,建议仅在开发环境开启。
使用结构化数据
传入对象参数而非拼接字符串,有助于日志分析与过滤。
通过以上方式,开发者可以更高效地追踪插件执行过程、排查问题,并保持日志系统的结构化与可扩展性。