在 Ubuntu 上定位 Node.js 日志,一般从「日志在哪」和「怎么查」两个角度入手。下面按常见场景给你一个实用清单。
不同运行方式,日志位置完全不同:
| 运行方式 | 常见日志位置 |
|---|---|
直接 node app.js |
终端输出(stdout / stderr) |
npm start |
终端 |
| PM2 | PM2 管理日志 |
| systemd 服务 | journalctl |
| Docker | docker logs |
| Nginx 反向代理 | Nginx 日志 |
node app.js
日志在终端输出,包括:
console.logconsole.error✅ 查看方式:
# 如果你重定向过
node app.js > app.log 2>&1
pm2 list
pm2 logs
pm2 logs app_name
pm2 logs --err
~/.pm2/logs/
常见文件:
app-name-out.log
app-name-error.log
systemctl list-units --type=service | grep node
journalctl -u your-node-service -f
journalctl -u your-node-service -n 100
✅ Node.js 中的 console.log 会被 systemd 捕获
docker logs 容器名
docker logs -f 容器名
docker logs --tail 100 容器名
Node 本身没问题,但请求失败,可能是 Nginx:
# 访问日志
/var/log/nginx/access.log
# 错误日志
/var/log/nginx/error.log
查看:
tail -f /var/log/nginx/error.log
常见库:
winstonpinomorgan(HTTP 请求)查看配置里的 filename:
new winston.transports.File({ filename: 'logs/app.log' })
process.on('uncaughtException', (err) => {
console.error('Uncaught Exception:', err);
});
process.on('unhandledRejection', (err) => {
console.error('Unhandled Rejection:', err);
});
否则错误可能“消失”。
# 1. 看 Node 进程
ps -ef | grep node
# 2. 如果是 PM2
pm2 logs
# 3. 如果是 systemd
journalctl -u your-service -f
# 4. 看端口是否正常
netstat -tlnp | grep 3000
# 5. 看系统资源
top / htop
❌ 日志没输出
→ 输出被重定向 / 被 PM2 管理 / 在 Docker 里
❌ 日志太多找不到
→ 用 grep:
pm2 logs | grep ERROR
journalctl -u service | grep 500
❌ 日志时间不对
→ 检查服务器时区
timedatectl
你可以直接贴:
1️⃣ Node.js 启动方式(PM2 / systemd / docker / 直接运行)
2️⃣ 报错信息或现象
3️⃣ Ubuntu 版本
我可以一步一步帮你找到 具体日志文件在哪 ✅