温馨提示×

debian nodejs日志为何不全

小樊
38
2026-09-01 06:39:14
栏目: 编程语言

Debian 上 Node.js 日志“不全”通常不是 Node 本身丢日志,而是运行方式 + 日志重定向 + 系统日志机制共同作用的结果。下面按最常见原因给你排查清单。


一、最常见原因(90% 情况)

1️⃣ 用了 nohup / & 但只重定向了 stdout

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

问题:

  • console.log ✅ 有
  • 未捕获异常、段错误 ❌ 可能没有
  • 进程被杀(OOM、systemd 限制)❌ 没有

✅ 正确做法:

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

2️⃣ 用 systemd 但没看 journal

如果你是用:

systemctl start mynode

日志默认在 journal,不在文件里

查看方式:

journalctl -u mynode -f

常见 service 文件问题:

StandardOutput=journal
StandardError=journal

✅ 或改成:

StandardOutput=append:/var/log/node/app.log
StandardError=append:/var/log/node/app.log

3️⃣ 日志被 logrotate 截断

Debian 默认有 logrotate:

  • 文件被 rename
  • Node 仍写旧 fd
  • 看起来“日志没了”

检查:

ls -l /var/log/node/

✅ 解决:

  • winston / pino 支持 reopening
  • 或 logrotate 加 copytruncate

二、Node 自身原因

4️⃣ 异常没被捕获

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

否则:

  • 进程直接死
  • 没任何日志

5️⃣ 异步日志丢失

console.log('exit');
process.exit();

✅ 可能没写完

应:

process.on('exit', () => {});

三、权限 & 磁盘问题

6️⃣ 没写权限

sudo -u node node app.js

而日志目录属于 root

检查:

namei -l /var/log/node/app.log

7️⃣ 磁盘满了

df -h

Node 会静默停止写日志


四、推荐正确姿势(生产)

✅ 使用:

  • pm2
  • systemd + journal
  • winston/pino

示例(systemd):

[Service]
ExecStart=/usr/bin/node /opt/app/app.js
WorkingDirectory=/opt/app
User=node
Restart=on-failure
StandardOutput=journal
StandardError=journal

五、快速自查表

现象 可能原因
有时有有时没 & + 非 append
崩溃无日志 未捕获异常
文件变小 logrotate
完全没 journal
写一会儿停 磁盘满

如果你愿意,可以贴:

  • 启动方式
  • service 文件
  • 日志配置代码

我可以直接帮你定位是哪一种。

0