温馨提示×

为什么linux js日志为空

小樊
36
2026-09-14 16:27:33
栏目: 编程语言

Linux 下 JS 日志为空,通常不是“日志系统坏了”,而是没产生 / 没写到你以为的位置 / 被环境吞掉了。下面按最常见原因给你一个排查清单。


一、最常见原因一览

  1. JS 根本没执行
  2. 日志写到了别的地方
  3. 标准输出被丢弃(尤其后台 / systemd / nohup)
  4. 框架日志级别设置太高
  5. 权限问题导致写不进文件
  6. 异常被 catch 吞掉

二、按场景排查

1️⃣ Node.js 程序(后端 JS)

✅ 先看是否真的在跑

ps aux | grep node

✅ 手动前台运行,看有没有输出

node app.js

如果有日志,说明是运行方式问题

✅ 后台运行常见坑

node app.js &

可能日志在:

  • 当前终端(已关闭就丢了)
  • 或被 shell 丢弃

正确方式:

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

2️⃣ systemd 服务(非常常见)

如果你用:

ExecStart=/usr/bin/node /opt/app/app.js

✅ 日志在 journalctl,不是文件:

journalctl -u your-service -f

✅ 如果完全为空:

  • console.log
  • 程序启动即退出
  • 或被 Restart=always 反复重启

3️⃣ 前端 JS(浏览器)

Linux 上“前端 JS 日志为空”通常指:

  • 服务器日志里没有
  • 这是正常的 ✅

前端 console.log 只存在于浏览器

查看方式:

  • 浏览器 → F12 → Console

4️⃣ 日志级别问题(Express / Winston / PM2)

Winston 示例

logger.info('xxx') // 如果 level 是 error,info 不会输出

PM2

pm2 logs

5️⃣ 文件日志写不进去(权限)

ls -l /var/log/your.log

常见错误:

  • 用 root 启动,后来用普通用户
  • 目录不存在

测试:

fs.appendFileSync('/tmp/test.log', 'hello')

6️⃣ 异常被吞

try {
  doSomething()
} catch (e) {
  // 什么都没做
}

改成:

catch (e) {
  console.error(e)
}

三、快速自检清单 ✅

  • [ ] 是否真的有 console.log
  • [ ] 是前端还是后端 JS
  • [ ] 是否用 systemd / pm2 / docker
  • [ ] 日志是文件还是 stdout
  • [ ] 程序是否一启动就退出

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

  1. JS 类型(Node / 浏览器 / Electron)
  2. 启动方式(命令 / systemd / docker)
  3. 日志“你认为应该在哪”
  4. 一小段启动代码或配置

我可以直接告诉你为什么是空的

0