温馨提示×

如何看懂nodejs linux日志

小樊
43
2026-09-02 12:47:17
栏目: 编程语言

看懂 Node.js 在 Linux 上的日志,核心不是“看文件”,而是先搞清楚日志从哪来、是什么格式、代表什么含义,再结合系统工具去定位问题。下面按实用顺序讲。


一、先搞清楚:Node.js 日志都在哪?

1. 应用自己打的日志

最常见来源:

  • console.log / console.error
  • 日志库(winston / pino / log4js / bunyan)

常见位置:

/var/log/your-app/
~/logs/
项目目录下的 logs/

如果是 PM2 启动:

pm2 logs
pm2 logs app-name

2. 系统 / 进程日志

  • systemd:
journalctl -u your-app.service
journalctl -u your-app.service -f   # 实时
  • 容器:
docker logs -f container_name

3. 崩溃 & 系统级错误

  • OOM(内存溢出):
dmesg | grep -i "out of memory"
journalctl | grep -i kill
  • 未捕获异常:
node:internal/process/uncaughtException

二、Node.js 日志常见内容怎么读?

1. 普通业务日志

示例:

[2024-01-12 10:23:01] INFO  user login success uid=123

看:

  • 时间
  • 级别(INFO / WARN / ERROR)
  • 模块 / 接口
  • 关键参数(uid、requestId)

2. Error 日志(重点)

典型 Node 错误:

Error: connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect

重点看:

  • Error 类型(ECONNREFUSED / ETIMEDOUT / TypeError)
  • 堆栈第一行(出错位置)
  • 是哪个服务(redis / mysql / http)

3. 未捕获异常 / Promise 拒绝

uncaughtException
unhandledRejection

说明:

  • 代码有 bug
  • 没有 try/catch
  • 没有全局错误处理

三、Linux 下常用“看日志”命令(必须会)

实时看

tail -f app.log

看最新 200 行

tail -n 200 app.log

搜索错误

grep -i error app.log
grep -C 5 "ECONNREFUSED" app.log

按时间看

sed -n '/10:00/,/10:30/p' app.log

看 CPU / 内存异常时间点

top
htop
free -h

四、一个标准排查流程(实战)

现象:接口变慢 / 服务挂了

  1. 看进程在不在
ps aux | grep node
  1. 看实时日志
pm2 logs
# 或
tail -f /var/log/app/error.log
  1. 搜索错误关键词
grep -i "error\|timeout\|refused" app.log
  1. 看系统资源
top
df -h
  1. 看是否 OOM
dmesg | tail

五、让日志“更好懂”的建议(很重要)

1. 使用结构化日志(强烈推荐)

{"level":"error","time":"...","msg":"db failed","err":"..."}

工具:pino(最快)、winston

2. 必加字段

  • requestId
  • userId
  • 接口路径
  • 耗时

3. 全局捕获

process.on('uncaughtException', ...)
process.on('unhandledRejection', ...)

六、一句话总结

看懂 Node.js Linux 日志 = 知道日志来源 + 会用 tail/grep/journalctl + 能从 ERROR / 堆栈 / OOM 定位问题

如果你愿意,可以:

  • 贴一段真实日志
  • 或告诉我你用的是 PM2 / Docker / systemd / 裸 node

我可以直接帮你“逐行翻译”。

0