温馨提示×

Ubuntu Nodejs日志为何为空

小樊
41
2026-07-10 05:17:04
栏目: 编程语言

在 Ubuntu 上 Node.js 日志为空,通常不是 Node 本身的问题,而是日志没有真正输出到你认为的地方。下面按最常见原因逐条排查,你可以对照看看属于哪一种。


一、最常见原因汇总(先看这个)

✅ 1. 程序根本没运行 / 没走到日志代码

确认进程是否真的在跑:

ps aux | grep node

或:

systemctl status your-service

如果进程没启动或反复重启,自然不会有日志。


✅ 2. 日志输出到了 stdout / stderr,但你没看到

Node.js 默认日志是:

console.log()   // stdout
console.error() // stderr

如果你用:

node app.js

没有重定向,日志可能:

  • 被 systemd 接管
  • 被 PM2 接管
  • 被 shell 关闭时丢弃

✅ 正确查看方式:

journalctl -u your-service -f

或(PM2):

pm2 logs

✅ 3. systemd 服务日志为空(非常常见)

如果你用 systemd 启动 Node:

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

✅ 日志不会写到文件,而是在 journald 里。

查看:

journalctl -u your-service -f

如果你期望日志写到文件,必须显式指定:

StandardOutput=append:/var/log/node/app.log
StandardError=append:/var/log/node/error.log

并确保目录存在:

mkdir -p /var/log/node
chown -R youruser:youruser /var/log/node

✅ 4. PM2 但没看 PM2 的日志

如果你用 PM2 启动:

pm2 start app.js

日志在这里:

pm2 logs
pm2 logs app

而不是:

/var/log/*

PM2 默认日志路径:

~/.pm2/logs/

✅ 5. 日志被 winston / pino / log4js 写到文件,但路径错误

如果你用的是日志库:

winston.createLogger({
  transports: [
    new winston.transports.File({ filename: 'app.log' })
  ]
})

⚠️ 相对路径是相对于启动目录,不是 JS 文件。

确认实际路径:

console.log(process.cwd())

✅ 建议用绝对路径:

path.join(__dirname, 'logs/app.log')

✅ 6. Docker / 容器环境

如果你在 Docker 里:

  • 日志必须输出到 stdout / stderr
  • 写文件是没用的

✅ 正确方式:

console.log('hello')

查看:

docker logs <container-id>

✅ 7. 日志级别过滤(winston / pino)

例如:

level: 'error'

info 日志就不会出现。

✅ 临时测试:

logger.info('test')
logger.error('test')

✅ 8. 文件存在但权限不足

日志文件存在,但 Node 没权限写:

ls -l /var/log/node/app.log

解决:

chmod 644 /var/log/node/app.log
chown node:node /var/log/node/app.log

二、快速自检清单(30 秒)

# 1. 进程在跑吗?
ps aux | grep node

# 2. 用 systemd?
journalctl -u your-service -f

# 3. 用 PM2?
pm2 logs

# 4. 有 console.log 吗?
node -e "console.log('hello')"

三、如果你愿意,我可以直接帮你定位

你可以直接贴出:

  1. 启动方式
    • systemd / PM2 / Docker / 直接 node
  2. 日志相关代码
    • console.log 还是 winston
  3. 你期望日志出现的位置
    • 文件 / journalctl / 终端

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

0