温馨提示×

Debian JS日志为何缺失

小樊
39
2026-07-13 02:36:11
栏目: 编程语言

Debian 系统里“JS 日志缺失”通常不是单一原因,而是环境、服务配置、日志路径、权限或 systemd/stdout 行为共同导致的。下面按常见场景给你一个排查清单,并给出对应解决办法。


一、先明确:你说的“JS 日志”通常指什么?

常见情况包括:

  1. Node.js 应用日志
    • console.log / console.error
    • 日志库(winston、pino、bunyan 等)
  2. 前端 JS(浏览器)
    • 浏览器控制台日志(不在服务器)
  3. PM2 / Docker / systemd 管理的 Node 服务
  4. Web 服务器(Nginx / Apache)反向代理日志

下面重点讲 Debian + Node.js 服务日志缺失 的情况。


二、最常见原因(90% 都在这里)

1️⃣ systemd 吞掉了 stdout / stderr

如果你用 systemd 管理 Node 服务:

# /etc/systemd/system/xxx.service
[Service]
ExecStart=/usr/bin/node /app/server.js

默认行为

  • console.log → systemd journal
  • 不会自动生成 /var/log/xxx.log

✅ 检查方式:

journalctl -u your-service-name -f

✅ 解决方案(推荐):

StandardOutput=append:/var/log/your-app/out.log
StandardError=append:/var/log/your-app/err.log

然后:

systemctl daemon-reload
systemctl restart your-service

2️⃣ systemd 日志被“清掉”或没持久化

Debian 默认 journal 可能不持久

检查:

ls /var/log/journal

如果没有:

mkdir -p /var/log/journal
systemctl restart systemd-journald

3️⃣ 日志目录不存在 / 权限不足(非常常见)

Node 进程 无法写日志文件 时,日志会直接丢失。

检查:

ls -ld /var/log/your-app

修复:

mkdir -p /var/log/your-app
chown -R node:node /var/log/your-app

⚠️ 注意:

  • 不要用 root 启动 Node
  • 或给目录写权限

4️⃣ PM2 日志路径被改或清理

如果你用 PM2:

pm2 logs
pm2 logs app-name

检查配置:

pm2 show app-name

常见问题:

  • PM2 日志被 logrotate 清掉
  • 日志路径指向 /dev/null
  • 磁盘满了

5️⃣ Node.js 异常退出,日志没来得及写

如果进程 直接崩溃

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

✅ 建议:

  • 用 PM2
  • 或 systemd Restart=always

6️⃣ Docker 容器里“日志不见了”

如果你在 Docker 中运行 JS:

✅ 容器里:

docker logs 容器名

✅ 原因:

  • 日志写到文件,但容器被销毁
  • 没挂载 volume

✅ 正确做法:

docker run -v /var/log/app:/app/logs ...

7️⃣ 日志被 logrotate 截断

Debian 默认会轮转日志。

检查:

cat /etc/logrotate.d/your-app

常见问题:

  • 轮转后没 reload 服务
  • 文件被 truncate,但 fd 没更新

三、快速定位 checklist(照着做)

# 1. 服务是否运行
systemctl status your-app

# 2. systemd 日志
journalctl -u your-app -n 100

# 3. 磁盘是否满
df -h

# 4. inode 是否满
df -i

# 5. 日志目录权限
ls -ld /var/log/your-app

# 6. Node 是否真的在写日志
strace -p $(pgrep node) -e write

四、推荐的“不丢日志”配置(生产级)

systemd + Node

[Service]
User=node
WorkingDirectory=/opt/app
ExecStart=/usr/bin/node index.js
StandardOutput=append:/var/log/app/out.log
StandardError=append:/var/log/app/err.log
Restart=always

Node 内部

  • 用 winston / pino
  • 日志写到文件 + stdout

五、如果你愿意,我可以更精确帮你

你可以直接贴出:

  1. 你是怎么启动 JS 的(systemd / PM2 / Docker / 手动)
  2. 用的什么日志方式(console / winston / pino)
  3. Debian 版本(cat /etc/os-release
  4. 日志“缺失”的具体场景(启动没日志?崩溃没日志?还是突然没了?)

我可以一步一步帮你定位到具体哪一行配置导致日志消失

0