温馨提示×

linux nodejs日志怎么定位

小樊
41
2026-09-29 17:46:56
栏目: 编程语言

在 Linux 上用 Node.js 部署服务时,“日志怎么定位问题”通常分 三层:日志在哪 → 日志怎么看 → 怎么快速定位异常。下面按实战方式讲。


一、先确认 Node.js 日志在哪

1. 应用自己打的日志

常见方式:

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

看代码里日志写到哪了,例如:

winston.add(new winston.transports.File({ filename: 'logs/app.log' }));

2. PM2 管理的 Node 服务(最常见)

pm2 logs
pm2 logs app-name
pm2 logs --lines 200

日志默认在:

~/.pm2/logs/

3. 系统服务(systemd)

如果是 systemctl 启动:

journalctl -u your-node-service
journalctl -u your-node-service -f
journalctl -u your-node-service --since "2024-01-01 10:00"

4. Docker 容器

docker logs container_name
docker logs -f container_name
docker logs --tail 200 container_name

二、怎么看日志(核心命令)

实时看

tail -f app.log

看最后 N 行

tail -n 200 app.log

搜关键字(最常用)

grep -n "Error" app.log
grep -n "ECONNREFUSED" app.log

按时间范围

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

统计错误数量

grep -c "Error" app.log

三、Node.js 常见错误怎么定位

1. 看错误栈(最重要)

日志里出现:

Error: connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect

✅ 直接看:

  • 错误类型
  • 端口 / IP
  • 调用栈第一行代码

2. 内存泄漏 / 崩溃

  • 看是否有:
heap out of memory
  • 用:
node --max-old-space-size=1024 app.js

3. 接口慢 / 超时

  • 在日志里加:
const start = Date.now();
// ...
console.log(`cost: ${Date.now() - start}ms`);

4. 未捕获异常

一定要加:

process.on('uncaughtException', e => {
  console.error('uncaughtException', e);
});

process.on('unhandledRejection', e => {
  console.error('unhandledRejection', e);
});

四、推荐的日志规范(避免后期难定位)

✅ 每条日志包含:

  • 时间
  • 级别(INFO / ERROR)
  • 请求ID
  • 用户ID(如有)

示例(pino):

logger.error({ reqId, err }, 'db query failed');

五、快速定位套路(实战)

  1. 先确认服务是否还活着
ps aux | grep node
  1. 看最近错误
pm2 logs --lines 100 | grep ERROR
  1. 按时间 + 关键字缩小
  2. 看是否有外部依赖失败(DB / Redis / 接口)

如果你愿意,可以贴一段 日志内容或启动方式(PM2 / Docker / systemd),我可以直接帮你定位具体问题。

0 踩