Debian 上 Node.js 日志的包含内容与结构
一、核心字段与含义
- 时间戳:事件发生的具体时间,便于排查时序问题。
- 日志级别:如 error、warn、info、debug、verbose、fatal/trace(不同库支持略有差异),用于区分严重程度与过滤。
- 进程 ID(PID):标识产生日志的 Node.js 进程,便于多进程/多实例定位。
- 消息体:错误堆栈、业务描述、状态变更等具体信息。
- 源文件与行号:调试时定位代码位置(需库或框架支持)。
- 日志标签/模块名:标识来源模块,便于分类检索。
- 自定义上下文:如 用户ID、请求ID、事务ID、执行耗时、请求参数 等,用于链路追踪与问题复现。
- 运行环境信息:如 Node.js 版本、操作系统版本、依赖库版本,辅助定位环境相关缺陷。
二、HTTP 请求类日志常见字段(如 Express + morgan)
- 请求方法(GET/POST 等)、URL 路径、HTTP 协议版本。
- 状态码(如 200、404、500)、响应时间/耗时。
- 请求来源信息:如 User-Agent、Referer。
- 客户端 IP(在反向代理或负载均衡后,需正确配置以获取真实 IP)。
三、常见输出位置与查看方式
- 应用自定义文件:如 /var/log/node-app.log 或 /var/log/nodejs/*.log(路径取决于应用与日志库配置)。
- 系统日志:使用 journald 时写入 /var/log/syslog 或 /var/log/messages;通过 journalctl -u your-service.service 查看。
- 命令行快速检索:
- 实时查看:
tail -f /var/log/nodejs/*.log
- 关键词过滤:
grep "error" /var/log/nodejs/*.log
- 日志轮转:建议使用 logrotate 按日/按大小切分,防止单文件过大。
四、影响日志内容的配置要点
- 日志级别控制:通过环境变量(如 LOG_LEVEL)或库配置设置输出级别,生产常用 info/warn/error,调试阶段开启 debug。
- 结构化与多目标输出:使用 Winston、Pino、Bunyan 等将日志输出为 JSON 并同时写入 控制台/文件/远程(如 ELK/Graylog),便于检索与分析。
- 请求日志中间件:morgan 提供多种格式(如 combined、dev),可按需记录更细粒度 HTTP 信息。