在 Linux 下“过滤 JS 日志”通常分几种场景:过滤 Node.js 运行日志、过滤前端 JS 在浏览器产生的日志(已落盘)、在日志文件里按关键词/级别/时间过滤。下面按常见用法给你一套实用方法。
假设日志文件是 app.log 或 server.log
grep "Error" app.log
grep "TypeError" app.log
grep "undefined is not" app.log
grep -i "error" app.log
grep -C 5 "TypeError" app.log # 前后5行
grep -A 10 "Error" app.log # 后10行
grep -B 10 "Error" app.log # 前10行
grep -E "Error|Warn|Exception" app.log
grep -v "heartbeat" app.log
ERROR / WARN / INFO / DEBUG
grep "\"level\":\"error\"" app.log
grep -i "level.*error" app.log
如果是 JSON 日志:
jq 'select(.level=="error")' app.log
tail -f app.log | grep "Error"
tail -f app.log | grep -i "exception"
只看重错误:
tail -f app.log | grep -E "Error|TypeError|ReferenceError"
grep "2026-01-21" app.log
awk '$0 >= "2026-01-21 10:00" && $0 <= "2026-01-21 11:00"' app.log
tail -n 1000 app.log | grep "Error"
如果你用的是:
console.error('xxx')
node app.js 2> error.log
然后:
tail -f error.log
pm2 logs
pm2 logs --err
pm2 logs --lines 100
过滤:
pm2 logs | grep "Error"
DEBUG=* node app.js
DEBUG=express:* node app.js
如果是 JSON 日志,用 jq 最舒服:
jq 'select(.level=="error")' app.log
jq 'select(.message | contains("Timeout"))' app.log
tail -n 500 app.log | grep -C 10 "TypeError"
tail -f app.log | grep -v "GET /health"
grep -c "Error" app.log
如果你能告诉我:
我可以直接给你精准的过滤命令。