分析 Node.js 运行日志,核心目标是快速定位问题、评估系统健康、发现性能瓶颈。下面从「日志来源 → 分析维度 → 工具方法 → 实战示例」系统讲一下。
console.log / console.errorwinstonpino(高性能)bunyan关注点:
ERROR / FATALstack trace示例:
{
"level": "error",
"message": "Database connection failed",
"stack": "Error: connect ECONNREFUSED...",
"timestamp": "2026-01-21T10:00:00Z"
}
常见错误类型:
ECONNREFUSED(服务未启动)ETIMEDOUT(网络/数据库慢)Cannot read property xxx of undefined(代码 bug)PayloadTooLargeError(请求体过大)重点看:
{
"method": "GET",
"url": "/api/user",
"duration": 1200,
"status": 200
}
判断标准:
1s:需要优化
5s:高风险
blocked / clinic关注:
示例:
Too many requests
Request timeout after 3000ms
重点:
危险信号:
heap out of memory# 查看错误日志
grep ERROR app.log
# 统计错误数量
grep -c ERROR app.log
# 查看最近 100 行
tail -n 100 app.log
jq 'select(.level=="error")' app.log
| 工具 | 适用场景 |
|---|---|
| ELK(Elasticsearch + Logstash + Kibana) | 企业级 |
| Grafana + Loki | 轻量 |
| Datadog / New Relic | 商业 |
| Sentry | 错误追踪 |
clinic.js(性能分析神器)clinic doctor -- node app.js
0x(火焰图)node --inspect(实时调试)logger.info({
event: 'user_login',
userId: 123,
duration: 45
})
requestIduserIdtraceIddebug:开发info:正常流程warn:可恢复异常error:必须处理步骤:
duration > 1000❌ 只打 console.log
❌ 日志中无上下文
❌ 把日志当数据库用
❌ 错误或 warn 被忽略
Node.js 日志分析 = 错误定位 + 性能评估 + 稳定性监控
如果你愿意,可以:
我可以给你更针对性的方案。