温馨提示×

为什么js日志为空linux

小樊
34
2026-10-02 14:25:57
栏目: 编程语言

在 Linux 上运行 JavaScript(通常是 Node.js)时,日志为空通常不是“没执行”,而是输出没到你看到的地方。下面按最常见原因说明。


1️⃣ 日志被重定向到了文件 / dev/null

常见写法:

node app.js > /dev/null 2>&1

这样 stdout 和 stderr 都会被丢弃,你当然看不到任何日志。

✅ 解决:

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

2️⃣ 用了 console.log,但程序很快退出

例如:

setTimeout(() => {
  console.log('done')
}, 5000)

如果你用:

node app.js &

然后 shell 退出,进程可能被杀。

✅ 解决:

node app.js
# 或
nohup node app.js &

3️⃣ 日志写到了文件,但你没看文件

代码里可能是:

const fs = require('fs')
fs.writeFileSync('log.txt', 'hello')

而不是 console.log

✅ 解决:

cat log.txt

4️⃣ 使用了日志库(winston / pino),但没配置 transport

例如 winston:

const logger = winston.createLogger({})
// 没加 transports

结果是 什么都不输出

✅ 正确示例:

winston.add(new winston.transports.Console())

5️⃣ 后台进程 + systemd,日志在 journalctl

如果你用 systemd:

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

日志不在终端,而在:

journalctl -u your-service -f

6️⃣ 程序抛错但被 catch 吞了

try {
  doSomething()
} catch (e) {
  // 啥也没做
}

✅ 至少:

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

7️⃣ 你的 JS 根本没运行

检查:

echo $?
ps aux | grep node

快速排查 checklist ✅

node -v
node app.js
# 看是否有输出
node app.js 2>&1 | cat

如果你愿意,可以把:

  • 启动命令
  • 一段 JS 代码
  • 运行环境(Node 版本 / 是否 systemd / Docker)

发出来,我可以直接帮你定位是哪一条。

0 踩