Ubuntu JS日志中哪些信息有助于调试
小樊
44
2025-12-23 19:00:34
Ubuntu环境下JS日志的关键调试信息
一 核心必记录字段
时间戳 :精确到毫秒,便于时序定位与回溯。
日志级别 :如 ERROR、WARN、INFO、DEBUG ,控制输出粒度与告警阈值。
进程/线程信息 :如 PID 、线程ID(若适用),便于多进程/集群排查。
模块/组件 :标记来源文件、类或函数,快速缩小范围。
请求/会话上下文 :如 requestId、sessionId、userId ,串联同一次调用的全链路日志。
错误与堆栈 :包含 错误类型、消息、堆栈跟踪(stack) ,是定位异常根因的关键。
HTTP 请求与响应 :如 URL、方法、状态码、响应时间、请求体/响应体摘要 ,用于接口问题定位。
性能指标 :如 响应时间、内存使用、CPU占用 ,辅助发现性能瓶颈。
配置与环境 :如 Node 版本、依赖版本、运行环境、关键配置 ,复现与对比问题更可靠。
二 Node.js 常见错误与警告及含义
SyntaxError :语法错误,代码无法通过解析(如缺少引号、括号不匹配)。
TypeError :类型不匹配(如对数字调用函数)。
ReferenceError :访问未定义变量或属性。
RangeError :数值或参数超出有效范围(如数组长度为负)。
URIError :URI 编解码参数非法。
系统资源类错误 :如 EADDRINUSE (端口被占用)、EACCES (权限不足),多与部署与运行环境相关。
Node.js 运行时警告 :
DeprecationWarning :使用了即将废弃的 API,需尽快替换。
UnhandledPromiseRejectionWarning :存在未处理的 Promise 拒绝,可能导致不稳定。
MaxListenersExceededWarning :可能的内存泄漏(事件监听未清理)。
ENOMEM / JavaScript heap out of memory :内存不足,需排查泄漏或调整内存上限。
三 日志级别与输出方式
级别设置 :开发环境建议 DEBUG/INFO ,生产环境常用 INFO/WARN ,告警关键路径使用 ERROR ;通过日志库(如 Winston、Bunyan、Pino )统一配置。
结构化与可读性 :优先 JSON 格式 便于检索与分析;开发期可开启 prettyPrint 提升可读性。
多目标输出 :同时输出到 控制台 与 文件 ,错误单独落盘;必要时接入 远程日志/聚合系统 。
日志轮转 :按 时间/大小 切分与保留,避免磁盘被占满(如按天切分、保留近 7/30 天)。
HTTP 访问日志 :使用 morgan 记录请求方法、路径、状态码、响应时间等,便于接口问题排查。
四 在 Ubuntu 上的快速定位与查看
服务化场景 :使用 journalctl 查看服务日志(如 systemd 管理的 Node 服务)。
PM2 管理 :使用 pm2 logs 实时查看与按级别筛选(如仅看 WARN )。
文件日志 :使用 tail -f 实时跟踪日志文件,结合 grep 过滤关键字(如 ERROR、WARN、timeout)。
内核与系统消息 :必要时查看 dmesg 了解底层资源或驱动层异常线索。
五 推荐的日志字段模板与示例
建议的最小结构化字段集:
timestamp、level、pid、module、msg、err.type/err.message/err.stack
reqId、method、url、statusCode、responseTime
userId(可选)、host、env、nodeVersion、gitSha(可选)
示例(JSON,便于检索):
错误日志
{“timestamp”:“2025-12-23T10:12:34.567Z”,“level”:“ERROR”,“pid”:12345,“module”:“payment”,“reqId”:“abc-123”,“method”:“POST”,“url”:“/pay”,“statusCode”:500,“responseTime”:1243,“err”:{“type”:“TypeError”,“message”:“Cannot read property ‘id’ of undefined”,“stack”:“…”}}
访问日志
{“timestamp”:“2025-12-23T10:12:35.102Z”,“level”:“INFO”,“pid”:12345,“module”:“http”,“reqId”:“abc-124”,“method”:“GET”,“url”:“/health”,“statusCode”:200,“responseTime”:8,“userAgent”:“curl/7.68.0”}
警告日志
{“timestamp”:“2025-12-23T10:12:36.210Z”,“level”:“WARN”,“pid”:12345,“module”:“db”,“reqId”:“abc-125”,“msg”:“Connection pool nearing limit”,“active”:98,“max”:100}