读懂 Node.js 在 Linux 上的日志,关键不在于“日志格式本身”,而在于先搞清楚日志是从哪里来的、以什么形式输出的、再结合 Node 的运行方式去分析。下面按实用思路给你讲。
Node.js 本身不会自动写日志文件,日志通常是以下几种来源之一:
常见方式:
console.log / console.errorwinston、pino、bunyan、log4js如果你用:
pm2systemddockerforever那日志一般被重定向到文件或 journal。
systemd:journalctlnode app.js
日志直接在终端,如果没重定向,就没文件。
重定向示例:
node app.js > app.log 2>&1
pm2 logs
pm2 logs app
日志文件一般在:
~/.pm2/logs/
journalctl -u your-service
journalctl -u your-service -f
docker logs container_name
docker logs -f container_name
日志一般包含:
示例:
2026-01-21 10:32:01 error Email send failed
如果时间跳跃很大,说明:
常见级别(从轻到重):
debug < info < warn < error < fatal
重点看:
erroruncaughtExceptionunhandledRejectionNode 报错通常长这样:
Error: connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect (net.js:1146:16)
你能得到:
如果同一错误:
看系统日志:
dmesg | grep node
常见原因:
EADDRINUSE: address already in use :::3000
解决:
lsof -i:3000
kill -9 PID
ECONNREFUSED
ETIMEDOUT
检查:
unhandledRejection
说明 Promise 没 catch
const pino = require('pino')
const logger = pino()
logger.info('user login')
logger.error(err)
logger.error({ userId: 123 }, 'login failed')
console.log → stdoutconsole.error → stderrLinux 里:
> out.log 2> err.log
error如果你愿意,可以把一段真实 Node.js 日志贴出来,我可以帮你逐行解读,告诉你问题在哪、该怎么修。