温馨提示×

Debian JS日志为何丢失

小樊
33
2026-07-27 12:10:58
栏目: 编程语言

Debian 上“JS 日志丢失”通常不是单一原因,而是日志系统、应用配置、磁盘/权限或 systemd 行为共同作用的结果。下面按常见场景给你一个排查清单,并给出对应解决办法。


一、最常见的 6 大原因

1️⃣ systemd 日志被自动清理(非常常见)

如果你的 JS 服务是通过 systemd 启动的:

journalctl -u your-service

可能原因:

  • journal 日志有大小/时间限制
  • 系统重启后旧日志被清除

检查:

journalctl --disk-usage

解决:

  • 延长保留时间:
mkdir -p /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-persist.conf <<EOF
[Journal]
Storage=persistent
MaxRetentionSec=7day
EOF
systemctl restart systemd-journald

2️⃣ 日志输出到 stdout / stderr,但未被捕获

Node.js 默认:

console.log()
console.error()

在 systemd 中 不会自动写文件,只进 journal。

现象:

  • 你以为“没日志”
  • 实际在 journalctl -u xxx

解决方式(推荐)

  • 用日志库(winston / pino)写文件
  • 或重定向 stdout:
# systemd service
StandardOutput=append:/var/log/myapp/out.log
StandardError=append:/var/log/myapp/err.log

3️⃣ 日志文件被 logrotate 删除或截断

Debian 默认启用 logrotate

典型问题:

  • 日志文件被 rotate 后程序仍写旧 fd
  • 文件消失但 inode 还在

检查:

lsof | grep deleted

解决:

  • 使用 copytruncate
  • 或让程序支持日志 reload(SIGHUP)

4️⃣ 权限问题(/var/log 写不进去)

非 root 用户运行 Node.js 时很常见。

现象:

  • 程序启动正常
  • 日志文件不生成

检查:

ls -ld /var/log/myapp

解决:

mkdir -p /var/log/myapp
chown -R myuser:myuser /var/log/myapp

5️⃣ Node.js 进程异常退出,日志来不及写

例如:

  • OOM
  • 未捕获异常
  • Docker / systemd 直接 kill

典型表现:

  • 最后一行日志缺失
  • 没有 error 日志

解决:

process.on('uncaughtException', (err) => {
  fs.appendFileSync('/var/log/myapp/fatal.log', err.stack + '\n');
  process.exit(1);
});

6️⃣ 磁盘满 / inode 满

Debian 服务器非常常见。

检查:

df -h
df -i

解决:

  • 清理日志
  • 调整日志策略

二、快速定位“到底丢在哪”

✅ 第一步:确认日志去哪了

journalctl -u your-service --since "10 min ago"

✅ 第二步:确认是否有文件日志

ls -lh /var/log/myapp

✅ 第三步:确认进程是否还在写

lsof -p $(pgrep node)

三、推荐的 Debian + Node.js 日志方案(生产级)

最稳妥组合

  • systemd(进程管理)
  • winston / pino(日志库)
  • /var/log/myapp/*.log
  • logrotate 配置

示例 logrotate:

/var/log/myapp/*.log {
  daily
  rotate 7
  compress
  missingok
  copytruncate
}

四、如果你愿意,我可以进一步帮你

你可以直接贴出:

  1. 你的 systemd service 文件
  2. JS 日志怎么打的(console / winston / pino)
  3. 完全没日志 还是 部分丢失

我可以精准告诉你是哪一条导致的。

0