温馨提示×

nodejs日志丢失ubuntu咋回事

小樊
41
2026-10-03 13:40:47
栏目: 编程语言

在 Ubuntu 上 Node.js 应用日志“丢失/看不到”,通常不是真的没产生,而是输出位置、进程管理、或日志轮转导致的。下面按最常见原因逐一排查:


1️⃣ 日志写到了 stdout / stderr,但被“吞了”

常见场景

  • 用 console.log()
  • 没配置日志文件
  • 用 pm2 / systemd / docker 启动

结果

日志其实在:

  • pm2:~/.pm2/logs/xxx-out.log
  • systemd:journalctl -u your-service
  • docker:docker logs 容器名

✅ 排查:

# pm2
pm2 logs

# systemd
journalctl -u your-node-service -f

# 直接运行
node app.js > app.log 2>&1

2️⃣ 用 systemd 启动,但没配置日志输出

现象

  • 服务在跑
  • /var/log 里没有日志
  • console.log 看不到

正确方式

[Service]
ExecStart=/usr/bin/node /opt/app/app.js
StandardOutput=journal
StandardError=journal

查看:

journalctl -u your-service -f

3️⃣ 日志被 logrotate 删了 / 清空了

Ubuntu 默认会 logrotate

可能情况:

  • 日志被压缩
  • 被 rm
  • 被 copytruncate 搞丢

✅ 检查:

ls -lh /var/log/
cat /etc/logrotate.d/your-app

4️⃣ 应用异常退出,日志没 flush

Node.js 是 异步写入

  • process.exit() 太早
  • 崩溃前日志没写完

✅ 建议:

  • 用日志库(winston / pino)
  • 不要直接 process.exit(0)

5️⃣ 路径权限问题(最容易被忽略)

Node 没权限写日志目录:

Error: EACCES: permission denied

✅ 检查:

ls -ld /var/log/yourapp
whoami

6️⃣ 时区 / 文件名导致“看起来丢了”

  • 日志按日期生成
  • 实际在别的文件
find / -name "*.log" -mmin -30

✅ 推荐最佳实践(Ubuntu + Node)

用 PM2

pm2 start app.js
pm2 logs

或用 systemd + journald

journalctl -u node-app -f

或写文件 + logrotate

const fs = require('fs')
fs.appendFileSync('/var/log/node/app.log', log)

如果你愿意

可以告诉我:

  • 怎么启动 Node(pm2 / systemd / docker / 手动)
  • 日志是 console.log 还是写文件
  • Ubuntu 版本

我可以直接帮你定位是哪一类问题。

0 踩