Debian 上 Node.js 日志格式的特点
总体说明
在 Debian 上运行的 Node.js 并没有统一的“系统级”日志格式,日志形态由应用自身及所用框架/库决定。常见做法是:开发环境输出便于阅读的文本日志,生产环境输出便于采集与检索的 JSON 结构化日志;同时结合 日志级别、时间戳、请求上下文 等字段,形成可排序、可过滤、可聚合的日志体系。
常见日志格式与适用场景
- 文本行日志(开发/调试常用)
- 典型要素:时间戳、日志级别、消息、可选的文件:行号。
- 特点:人可读性强,便于本地排查;但机器解析成本较高。
- JSON 结构化日志(生产推荐)
- 典型要素:timestamp、level、msg、pid、hostname,并可扩展 requestId、userId、duration、stack 等上下文。
- 特点:利于 ELK 等集中式日志平台做检索、聚合与可视化;对性能和可观测性友好。
- HTTP 请求日志(Express + morgan)
- 内置格式:dev、combined、common、short、tiny,字段覆盖方法、路径、状态码、响应时间、UA 等。
- 特点:快速接入、满足不同粒度需求;可与应用日志分离,便于访问分析。
字段与结构的通用做法
- 时间戳:优先使用 ISO 8601 或与 syslog 一致的格式,便于跨系统排序与解析。
- 日志级别:遵循 FATAL/ERROR/WARN/INFO/DEBUG/TRACE 语义,生产通常将级别调高以减少噪声。
- 上下文扩展:在 JSON 中携带 requestId、traceId、userId、耗时 等,用于链路追踪与性能分析。
- 安全合规:避免记录 密码、密钥、敏感个人信息;必要时做脱敏与最小化输出。
输出、轮转与运维特征
- 多目标输出:同时输出到 控制台 与 文件(如 error.log、combined.log),便于本地调试与持久化归档。
- 日志轮转:使用 pm2-logrotate 或 logrotate 按日/按大小切割,防止单文件过大影响 I/O 与检索。
- 异步与非阻塞:采用异步日志或高性能库,降低对业务线程的影响。
- 集中式管理:将日志发送至 ELK 或兼容系统,统一检索、告警与可视化。