温馨提示×

为什么debian js日志丢失

小樊
45
2026-09-10 04:09:15
栏目: 编程语言

Debian 上 JS(JavaScript)日志丢失 通常不是“系统把日志吃了”,而是日志写到哪里、谁在管日志、进程怎么退出这几个环节出了问题。下面按最常见原因给你梳理。


一、最常见原因汇总

1️⃣ 日志写到了 stdout / stderr,但被忽略了

很多 Node.js 应用是:

console.log('xxx')
console.log(err)

在 systemd / pm2 / docker 环境下:

  • 日志不会自动写文件
  • 直接“消失”在终端或容器外

✅ 检查方式:

journalctl -u your-service

或

pm2 logs

2️⃣ systemd 吞掉了日志(非常常见)

Debian 默认用 systemd 管理服务。

如果服务是:

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

那日志在:

/var/log/journal/

而不是你以为的 /var/log/xxx.log

✅ 解决:

journalctl -u your-app.service --since "1 hour ago"

或显式写日志文件:

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

3️⃣ 应用异常退出,日志来不及 flush

Node.js 是异步的:

console.log('error')
process.exit(1)

可能日志还没写出去进程就死了。

✅ 正确方式:

process.on('exit', () => {
  // 同步写日志
})

或使用 pino / winston 这类可靠 logger。


4️⃣ 日志文件路径不存在 / 无权限

Debian 默认:

  • /var/log 只有 root 可写
  • 普通用户运行 node → 日志写失败

✅ 检查:

ls -l /var/log/yourlog.log
whoami

✅ 建议:

sudo mkdir /var/log/myapp
sudo chown node:node /var/log/myapp

5️⃣ logrotate 把日志清了

Debian 默认有:

/etc/logrotate.d/

可能:

  • 日志被压缩
  • 或 size 太小直接清空

✅ 检查:

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

6️⃣ Docker / 容器环境

如果你在 Debian 上跑 Docker:

  • 日志在容器里
  • 容器删了 → 日志没了

✅ 解决:

  • 挂载 volume
  • 或用 docker logs

7️⃣ 用了 pm2 但没开日志

pm2 默认:

~/.pm2/logs/

但:

  • 用户切换后找不到
  • 或 pm2 重启丢失

✅ 检查:

pm2 logs
pm2 describe app

二、推荐做法(-Debian 最佳实践)

✅ Node.js 正确写日志方式

const fs = require('fs');
const log = fs.createWriteStream('/var/log/myapp/app.log', { flags: 'a' });
log.write(`[${new Date()}] error\n`);

或使用:

  • winston
  • pino

✅ systemd 示例

[Service]
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node app.js
StandardOutput=append:/var/log/myapp/app.log
StandardError=append:/var/log/myapp/error.log
User=node

三、快速排查清单 ✅

你可以按顺序查:

  1. journalctl -u 服务名
  2. pm2 logs
  3. docker logs 容器
  4. ls -l 日志路径
  5. ps aux | grep node
  6. 检查 logrotate

如果你愿意,可以把下面信息发我,我能精准定位:

  • Debian 版本
  • Node 运行方式(systemd / pm2 / docker / 直接跑)
  • 日志代码示例
  • 是否使用框架(Express / Next / Nuxt 等)

我可以直接帮你改配置。

0 踩