温馨提示×

怎样读懂nodejs linux日志

小樊
34
2026-10-14 09:38:10
栏目: 编程语言

读懂 Node.js 在 Linux 上的日志,关键不在于“日志格式本身”,而在于先搞清楚日志是从哪里来的、以什么形式输出的、再结合 Node 的运行方式去分析。下面按实用思路给你讲。


一、先搞清楚:日志从哪来?

Node.js 本身不会自动写日志文件,日志通常是以下几种来源之一:

1. 应用自己打印的日志

常见方式:

  • console.log / console.error
  • 日志库:winston、pino、bunyan、log4js

2. 进程管理器重定向的日志

如果你用:

  • pm2
  • systemd
  • docker
  • forever

那日志一般被重定向到文件或 journal。

3. 系统/运行环境日志

  • systemd:journalctl
  • Nginx 反向代理错误
  • OOM(内存溢出)被 Linux 杀掉

二、常见日志位置(Linux)

1. 直接用 node 启动

node app.js

日志直接在终端,如果没重定向,就没文件。

重定向示例:

node app.js > app.log 2>&1

2. PM2

pm2 logs
pm2 logs app

日志文件一般在:

~/.pm2/logs/

3. systemd

journalctl -u your-service
journalctl -u your-service -f

4. Docker

docker logs container_name
docker logs -f container_name

三、怎么“读”Node.js 日志

1. 看时间(最重要)

日志一般包含:

  • 时间戳
  • 日志级别

示例:

2026-01-21 10:32:01 error Email send failed

如果时间跳跃很大,说明:

  • 服务重启过
  • 或卡死过

2. 看日志级别

常见级别(从轻到重):

debug < info < warn < error < fatal

重点看:

  • error
  • uncaughtException
  • unhandledRejection

3. 看错误堆栈(Stack Trace)

Node 报错通常长这样:

Error: connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect (net.js:1146:16)

你能得到:

  • 错误类型(Error / TypeError)
  • 出错模块(net / http / db)
  • 调用链

4. 看“重复出现”的日志

如果同一错误:

  • 每秒出现多次
    → 说明在循环里抛异常
  • 启动就出现
    → 配置或依赖问题

四、典型 Node.js 日志问题速查

1. 服务突然没了

看系统日志:

dmesg | grep node

常见原因:

  • 内存溢出(OOM Killer)

2. 端口被占用

EADDRINUSE: address already in use :::3000

解决:

lsof -i:3000
kill -9 PID

3. 数据库连接失败

ECONNREFUSED
ETIMEDOUT

检查:

  • IP / 端口
  • 防火墙
  • 数据库是否起来

4. 异步错误没 catch

unhandledRejection

说明 Promise 没 catch


五、推荐做法(让日志更好读)

1. 用日志库而不是 console

const pino = require('pino')
const logger = pino()

logger.info('user login')
logger.error(err)

2. 日志带上下文

logger.error({ userId: 123 }, 'login failed')

3. 区分 stdout / stderr

  • console.log → stdout
  • console.error → stderr

Linux 里:

> out.log 2> err.log

六、一个简单“读日志流程”

  1. 确定服务怎么跑(pm2 / systemd / docker)
  2. 找到日志文件或命令
  3. 先搜 error
  4. 看时间戳是否连续
  5. 看堆栈定位代码
  6. 结合系统日志确认是否被杀

如果你愿意,可以把一段真实 Node.js 日志贴出来,我可以帮你逐行解读,告诉你问题在哪、该怎么修。

0 踩