Ubuntu Node.js日志中哪些信息有用
小樊
36
2025-12-29 15:35:40
Ubuntu Node.js 日志的关键信息
一 核心字段与最小结构
- 时间戳:精确到毫秒便于排序与排查时序问题。
- 日志级别:如 ERROR、WARN、INFO、DEBUG、FATAL,快速判断优先级。
- 进程ID(PID):多实例/多进程下定位具体进程。
- 模块/标签(label):标识来源文件、类或功能域,便于过滤。
- 消息体:错误描述、业务提示或状态信息。
- 错误堆栈(stack trace):异常发生链路,定位到具体文件与行号。
- 请求上下文:如 HTTP 方法、URL、状态码、响应时间、客户端 IP、User-Agent、Referer,用于性能与可用性分析。
- 自定义维度:如 userId、traceId、耗时、payload 摘要,支撑链路追踪与问题复现。建议统一为**结构化日志(JSON)**输出,便于检索与聚合。
二 不同场景应重点关注的日志
- 错误与异常:关注 Error/Exception 的 message、name、stack,以及发生时间窗口,优先修复高频或影响核心路径的错误。
- 未处理 Promise 拒绝:如 UnhandledPromiseRejectionWarning/UnhandledPromiseRejection,常导致静默失败,需为每个 Promise 加 .catch() 或全局监听并打日志。
- 弃用与内存告警:如 DeprecationWarning(提示未来兼容风险)、MaxListenersExceededWarning(可能的内存泄漏)、以及 JavaScript heap out of memory(需排查泄漏或调整内存上限)。
- HTTP 访问与性能:记录 method、url、status、responseTime、ip、ua、referer,用于统计错误率、P95/P99 延迟、热点接口与异常流量。
- 系统级事件:进程崩溃、重启、OOM Killer 等,结合 systemd journal 或系统日志定位环境与资源问题。
三 日志位置与查看方式
- PM2 管理:日志默认在 ~/.pm2/logs/,常见文件为 app.log / app-out.log / app-err.log;可用 pm2 logs 实时查看与按级别筛选。
- Systemd 服务:使用 journalctl -u your-node-service 查看;可按时间过滤,如 –since “10 minutes ago”。
- 直接文件输出:项目内 logs/ 目录常见 app.log / error.log / combined.log;用 tail -f 实时跟踪,配合 grep/awk 做快速检索与统计。
四 快速排查与优化要点
- 先过滤后定位:按 ERROR/WARN 筛选,再结合 traceId/requestId 还原单次请求链路;对异常堆栈自底向上查找根因。
- 定位端口冲突:遇到 EADDRINUSE,用 lsof -i :端口 查占用进程并释放端口。
- 依赖与语法问题:对 Module not found / SyntaxError 及时安装依赖或修复语法并回滚变更。
- 性能瓶颈与泄漏:在日志中输出 responseTime、memoryUsage,用 ELK/Grafana Loki 做趋势与分布分析;必要时用 clinic/heapdump/node --inspect/–prof 深入诊断。
- 稳定性与容量:配置日志轮转(如 logrotate 或日志库的按日轮转),避免磁盘被占满;生产建议使用 Winston/Pino 的结构化与多传输能力。