温馨提示×

ubuntu js日志为何丢失

小樊
37
2026-10-18 05:23:59
栏目: 编程语言

在 Ubuntu 上“JS 日志丢失”通常不是单一原因,而是日志写哪儿、进程怎么跑、系统怎么回收这几件事没对齐。下面按最常见场景帮你排查。


一、先确认:你说的“JS 日志”是哪种?

不同场景,丢失原因完全不同:

  1. Node.js 服务日志
    • console.log
    • winston / pino / log4js
  2. 前端 JS 日志
    • 浏览器 console(不落盘)
    • 上报到后端 / Sentry
  3. Nginx / 反向代理前的 JS 应用
  4. Docker 里的 JS 服务

二、Node.js 服务日志“消失”的常见原因(最多)

1️⃣ 日志写到 stdout,但被系统截断了

很多人在 Ubuntu 上这样跑:

node app.js > log.txt &

问题:

  • 终端关闭 → 进程收到 SIGHUP
  • 日志没 flush 就丢了

✅ 解决:

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

或用 pm2:

pm2 start app.js

2️⃣ systemd 吞掉了日志

如果你用 systemd:

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

JS 的 console.log 会进 journald,不是文件!

查看:

journalctl -u your-service -f

✅ 想要文件日志:

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

3️⃣ 日志被 logrotate 删了

Ubuntu 默认会轮转 /var/log

如果:

  • 你没用信号重开日志
  • 或用了 > 而不是 >>

rotate 后新日志写不进去

✅ 检查:

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

4️⃣ 磁盘满了 / inode 满了

df -h
df -i

日志满了直接丢弃,不报错。


5️⃣ 异步日志没 flush 就退出

比如:

process.exit(0)

winston / pino 还没写完

✅ 解决:

await logger.end()
process.exit(0)

三、前端 JS 日志“丢失”

前端日志本来就不落盘:

  • 刷新页面 → console 清空
  • 报错被 catch 吞掉
  • 没接错误上报

✅ 建议:

  • 接 Sentry
  • 或统一上报接口
window.onerror = (msg, url, line) => {
  fetch('/log', { method:'POST', body: msg })
}

四、Docker 场景(非常常见)

Docker 默认日志在:

/var/lib/docker/containers/

如果:

  • 容器重启
  • 没挂载 volume
  • 日志策略是 json-file 上限

✅ 解决:

docker run -v /host/log:/app/log ...

五、快速自查清单 ✅

你可以照着回答,我可以直接定位:

  1. JS 是 Node 还是浏览器?
  2. 日志写在 文件 / stdout / 系统日志?
  3. 怎么启动的?(pm2 / systemd / docker / nohup)
  4. 丢失是 重启后没 还是 运行中突然停?
  5. Ubuntu 版本?

如果你愿意,把启动方式 + 日志配置代码片段贴出来,我可以直接告诉你“哪一行在丢日志”。

0 踩