在 Ubuntu 上解析 Node.js 日志,通常取决于日志是怎么产生的(console、winston、pm2、docker 等)。下面按常见场景给你一套实用方案。
node app.js
日志一般输出在终端,或你重定向到的文件:
node app.js > app.log 2>&1
pm2 logs
pm2 logs app --lines 100
日志文件路径:
~/.pm2/logs/app-out.log
~/.pm2/logs/app-error.log
docker logs container_name
docker logs -f container_name
tail -f app.log
grep -i "error" app.log
grep -A 5 -B 5 "TypeError" app.log
awk '/2026-01-21 10:00/,/2026-01-21 11:00/' app.log
grep -c "Error" app.log
Server started on port 3000
Error: connect ECONNREFUSED
解析方式:
grep "Error:" app.log
示例:
{"level":"error","time":"2026-01-21T10:00:00Z","msg":"db failed"}
解析:
jq '.msg' app.log
jq 'select(.level=="error")' app.log
Winston 示例:
logger.error("user login failed", { userId: 1 });
日志:
error: user login failed userId=1
可用:
grep "user login failed" app.log
cat app.log | jq 'select(.level=="error")'
适合生产环境。
✅ 使用结构化日志:
const pino = require("pino");
const logger = pino();
logger.info({ userId: 1 }, "user login");
✅ 不要只写 console.log
为了给你更具体的方案,可以补充:
我可以直接帮你写解析脚本或正则。