温馨提示×

Debian JS日志为何为空

小樊
35
2026-07-13 02:32:59
栏目: 编程语言

Debian 上 JS(JavaScript)日志为空,通常不是 JS 本身的问题,而是运行环境、日志配置或输出位置的问题。下面按常见场景给你一个排查清单。


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

1️⃣ Node.js 服务日志为空

(最常见)

可能原因:

  • 日志没真正写入
  • 输出被 systemd / docker / pm2 接管
  • 没有触发日志逻辑
  • 日志路径错误或无写权限

✅ 快速自检:

ps aux | grep node

二、最常见原因 & 对应解决办法

✅ 1. 输出被 systemd 接管(很常见)

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

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

那么:

  • console.log() 不会写入文件
  • 日志在:
journalctl -u 服务名

✅ 查看日志:

journalctl -u your-service -f

✅ 想输出到文件:

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

然后:

systemctl daemon-reexec
systemctl restart your-service

✅ 2. 日志路径不存在 / 没权限

fs.writeFileSync('/var/log/app.log', data)

检查:

ls -l /var/log/app.log
touch /var/log/app.log
chown node:node /var/log/app.log

✅ 建议:

  • 不要直接写 /var/log
  • /var/log/your-app/

✅ 3. 程序没走到日志代码

常见坑:

  • 启动即退出
  • 监听端口失败
  • 未捕获异常

测试:

console.log('START')
throw new Error('test')

✅ 4. PM2 日志为空

如果你用 PM2

pm2 logs

或:

~/.pm2/logs/

如果为空:

pm2 restart app
pm2 flush   # 清理旧日志

✅ 5. Docker 容器(如果你在 Debian + Docker)

Docker 中:

  • 不会自动写文件
  • 日志在容器 stdout

查看:

docker logs 容器ID

✅ 正确做法:

docker logs -f 容器名

✅ 6. 日志库配置错误(winston / pino / bunyan)

示例(winston):

new winston.transports.File({ filename: '/var/log/app.log' })

常见错误:

  • 路径不存在
  • 权限不足
  • 没调用 logger.info()

✅ 测试:

logger.info('test log')

三、快速定位流程图(推荐)

JS 日志为空
│
├─ 是否用 systemd? ── journalctl -u 服务名
│
├─ 是否用 PM2? ── pm2 logs
│
├─ 是否 Docker? ── docker logs
│
├─ 是否写文件? ── ls /var/log/
│
└─ 是否真的执行了日志代码?

四、可以直接问我的信息

如果你愿意,可以把下面信息发我,我可以精确告诉你为什么是空的

  1. JS 运行方式(systemd / pm2 / docker / 手工 node)
  2. 日志实现方式(console.log / winston / 自己写文件)
  3. 日志预期位置
  4. Debian 版本(cat /etc/debian_version

我可以直接给你一套可用的日志配置示例

0