温馨提示×

Linux JS日志为何不显示

小樊
47
2026-08-28 23:41:20
栏目: 编程语言

“Linux JS 日志不显示”这个问题比较常见,但原因很多,需要先定位是哪一层没输出。我先给你一个排查清单,你可以逐条对照;如果有具体场景(Node.js / 前端 / PM2 / Docker / Nginx 等),可以再精确分析。


一、先确认:你说的「JS 日志」是哪一类?

常见情况:

  1. Node.js 后端程序
    • console.log() / console.error() 没输出
  2. 前端 JS
    • 浏览器控制台日志在 Linux 服务器上看不到(这是正常的)
  3. JS 运行在服务器,但作为服务
    • systemd / PM2 / Docker / 后台进程
  4. 日志被重定向或吞掉
  5. 程序报错直接退出,你没看到日志

二、最常见原因 & 解决方法

✅ 1. 输出被重定向了(最常见)

node app.js > log.txt

./start.sh > /dev/null

✅ 解决:

node app.js
node app.js 2>&1 | tee log.txt

✅ 2. stdout 被缓冲(Docker / 后台进程常见)

Node.js 在 非 TTY 环境下,console.log块缓冲,可能不会立刻显示。

✅ 解决方式之一:强制立即刷新

console.log('test')
process.stdout.write('\n')

✅ 或启动 Node 时禁用缓冲:

NODE_ENV=production node --no-warnings app.js

Docker 推荐:

node app.js | cat

✅ 3. 程序提前退出 / 报错,你没看到

很多新手会忽略这一点。

✅ 建议加:

process.on('uncaughtException', e => {
  console.error('Uncaught Exception:', e)
})

process.on('unhandledRejection', e => {
  console.error('Unhandled Rejection:', e)
})

✅ 4. 使用了 PM2(非常常见)

PM2 不会直接输出到终端

✅ 正确查看方式:

pm2 logs
pm2 logs app-name

或实时:

pm2 logs --lines 100

如果你是在 pm2 start app.js
然后 node app.js 看日志,那当然看不到。


✅ 5. systemd 服务(systemctl)

如果你用 systemd 启动 JS:

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

✅ 日志要看:

journalctl -u your-service-name -f

✅ 6. 日志级别被过滤

某些框架(如 NestJS / Egg / Koa)会过滤日志。

✅ 检查:

LOG_LEVEL=debug

或:

console.error('error log')

✅ 7. 你以为有日志,其实执行的是别的文件

比如:

node index.js

但代码在 app.js

✅ 确认:

ps aux | grep node

三、快速自检清单(30 秒定位)

你可以复制这段测试代码试试:

console.log('stdout test')
console.error('stderr test')
setTimeout(() => {
  process.exit(0)
}, 3000)

运行:

node test.js
  • 没输出 → 被重定向
  • 延迟出现 → 缓冲问题
  • 直接退出 → 程序异常

四、如果你愿意,我可以直接帮你精确定位

你可以直接贴出:

  1. 启动方式(命令行 / PM2 / Docker / systemd)
  2. 示例代码
  3. 你期望看到日志的地方
  4. Linux 发行版

我可以一步一步帮你把日志“找回来”。

0