在 Linux 下过滤 Node.js 日志,常见做法取决于日志来源(stdout / 文件 / 日志系统),常用工具包括 grep、jq、awk、tail -f 等。下面按场景给你一套实用方案。
控制台输出
node app.js
日志输出到 stdout / stderr
写入日志文件
fs.writeFileSync('app.log', log)
使用日志库
winstonpinomorgan(HTTP)bunyangrep "error" app.log
忽略大小写:
grep -i "error" app.log
显示行号:
grep -n "error" app.log
tail -f app.log | grep "error"
只显示最近 100 行:
tail -n 100 app.log | grep "error"
grep "2024-01-01 10:" app.log
正则匹配时间范围:
grep -E "2024-01-01 (10|11):" app.log
{"level":"error","message":"DB failed","time":"2024-01-01T10:00:00Z"}
jq 过滤cat app.log | jq 'select(.level=="error")'
只显示 message:
jq 'select(.level=="error") | .message' app.log
时间过滤:
jq 'select(.time > "2024-01-01T10:00:00Z")' app.log
node app.js 2>&1 | grep "error"
nohup node app.js > app.log 2>&1 &
grep -E "error|warn" app.log
pino-pretty < app.log | grep "error"
或:
jq 'select(.level == 50)' app.log
Pino 级别:trace=10, debug=20, info=30, warn=40, error=50, fatal=60
grep "error" app.log | grep "database"
grep -E "error|fail|crash" app.log
grep -v "info" app.log
Node.js 中打日志时带上 traceId:
logger.info({ traceId, userId, msg: 'request' })
日志过滤:
grep "traceId123" app.log
若 Node.js 是 systemd 服务:
journalctl -u my-node-app -f
过滤 ERROR:
journalctl -u my-node-app | grep -i error
✅ 实时排查
tail -f app.log | jq 'select(.level=="error")'
✅ 排错
grep -n "error" app.log
✅ 快速统计
grep -c "error" app.log
你可以告诉我:
我可以直接给你最合适的一条命令 ✅