温馨提示×

debian nodejs日志丢失怎么救

小樊
48
2026-10-04 05:53:21
栏目: 编程语言

在 Debian 上“Node.js 日志丢失”通常不是 Node 本身把日志删了,而是日志去哪儿了 / 被谁接走了 / 被轮转或覆盖掉了。可以按下面顺序排查和“救”。


一、先确认:日志到底在哪

1. 看 Node 进程是怎么启动的

ps -ef | grep node

重点看:

  • 是否带 > /var/log/xxx.log 2>&1
  • 是否用 pm2 / systemctl / docker

2. 常见日志位置

  • 应用自己写的日志
    /var/log/xxx/
    ~/project/logs/
    
  • systemd 管理
    journalctl -u your-node-service
    
  • pm2
    pm2 logs
    

二、如果是 systemd(最常见“看不到日志”的原因)

Debian 默认用 journald,不写文件,所以你以为“日志丢了”。

查看历史日志(即使重启过)

journalctl -u node.service --since "2024-01-01"
journalctl -u node.service -n 1000

导出救急

journalctl -u node.service > node-logs.txt

如果 journal 被清了

ls /var/log/journal/

若为空,说明已被 journalctl --vacuum 清掉,基本无法恢复。


三、如果是 logrotate 把日志干掉了

Debian 常用 logrotate:

cat /etc/logrotate.d/node

常见问题:

  • missingok
  • notifempty
  • 轮转后没 reload Node → 写入旧文件描述符

检查是否被轮转

ls -lh /var/log/node*

看到 .1 .gz 说明已被切走。

救法

zcat /var/log/node.log.1.gz

四、如果日志“写到一半没了”

1. Node 崩溃但没 flush

  • 用了 console.log 异步
  • 进程被 kill -9

✅ 建议:

  • 用 winston / pino
  • 或至少:
process.on('exit', () => {})

2. 重定向被覆盖

错误写法(会清空):

node app.js > log.txt

正确追加:

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

五、实在找不到了,还能“救”什么

1. 看系统层有没有痕迹

dmesg | grep node
/var/log/syslog
/var/log/kern.log

2. 看是否被 OOM

grep -i "out of memory" /var/log/syslog

3. 文件删除但进程还在(还有救!)

lsof | grep node | grep deleted

如果是:

ls -l /proc/<pid>/fd/

还能 cp 出来。


六、以后怎么防止再丢

✅ 用 systemd + journal
✅ 或 pm2 + 日志文件
✅ 不要手动 > log
✅ 日志库代替 console.log
✅ 配置 logrotate 正确 reload


如果你愿意,可以告诉我:

  • Debian 版本
  • Node 启动方式(systemd / pm2 / 手动)
  • 日志本来应该写哪里

我可以直接帮你写 恢复命令或配置。

0 踩