温馨提示×

ubuntu nodejs日志为啥丢失

小樊
44
2026-09-21 18:19:02
栏目: 编程语言

在 Ubuntu 上 Node.js 日志“丢失”通常不是真的没了,而是写的地方和你找的地方不一致,或者进程被某种方式接管/重启导致输出没落地。下面按最常见原因给你梳理一下。


一、最常见的 6 个原因

1. 日志写到了 stdout / stderr,但你没收集

很多 Node 服务:

console.log('xxx')

默认输出到:

  • 终端
  • systemd journal
  • 容器日志

但不会自动写文件。

✅ 检查方式:

journalctl -u your-node-service -n 100

2. systemd 服务没配置日志文件

如果你用 systemd 启动 Node:

[Service]
ExecStart=/usr/bin/node app.js

日志只会进 journal,不会写文件。

✅ 解决:

  • 看 journal:
journalctl -u your-service
  • 或改代码写文件
  • 或用 StandardOutput=file:/var/log/node/app.log

3. 用了 nohup / &,但终端关了

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

如果:

  • 终端断开
  • 没用 disown
  • 或 shell 退出

日志可能中断。

✅ 推荐:

nohup node app.js >> /var/log/node/app.log 2>&1 &

4. PM2 日志路径你找错了

PM2 默认日志在:

~/.pm2/logs/

✅ 查看:

pm2 logs
pm2 show app

5. 日志被 logrotate 清掉了

Ubuntu 默认会 rotate:

  • /var/log
  • 某些应用日志

可能你看到的“丢失”其实是被轮转/删除。

✅ 检查:

ls -lh /var/log/
cat /etc/logrotate.d/node

6. 程序崩了,但没写错误日志

Node 崩溃时:

  • 没 try/catch
  • 没 process.on('uncaughtException')

直接退出,什么都没留。

✅ 建议加:

process.on('uncaughtException', e => {
  require('fs').appendFileSync('/var/log/node/err.log', e.stack + '\n')
})

二、快速自查清单 ✅

你可以依次确认:

  1. 日志是 console.log 还是写文件?
  2. 用 systemd / pm2 / nohup 哪种启动?
  3. 日志文件是否存在?
  4. 是否被 logrotate 删除?
  5. 进程是否频繁重启?

三、推荐做法(避免再丢)

✅ 生产建议:

  • 用 PM2 或 systemd
  • 日志统一写 /var/log/yourapp/
  • 加 logrotate
  • 用 winston / pino 管理日志

如果你愿意,可以把:

  • 启动方式(systemd / pm2 / docker)
  • 日志代码(console 还是写文件)
  • 丢失现象(完全没 / 中途断)

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

0 踩