温馨提示×

如何过滤Linux Nodejs日志

小樊
42
2026-08-29 00:55:23
栏目: 编程语言

在 Linux 下过滤 Node.js 日志,常见做法取决于日志来源(stdout / 文件 / 日志系统),常用工具包括 grepjqawktail -f 等。下面按场景给你一套实用方案。


一、常见 Node.js 日志来源

  1. 控制台输出

    node app.js
    

    日志输出到 stdout / stderr

  2. 写入日志文件

    fs.writeFileSync('app.log', log)
    
  3. 使用日志库

    • winston
    • pino
    • morgan(HTTP)
    • bunyan

二、基础过滤(最常用)

1️⃣ 过滤关键字

grep "error" app.log

忽略大小写:

grep -i "error" app.log

显示行号:

grep -n "error" app.log

2️⃣ 实时查看日志(最常用)

tail -f app.log | grep "error"

只显示最近 100 行:

tail -n 100 app.log | grep "error"

3️⃣ 过滤时间段

grep "2024-01-01 10:" app.log

正则匹配时间范围:

grep -E "2024-01-01 (10|11):" app.log

三、结构化日志过滤(JSON 日志)

示例日志

{"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.js 进程日志(stdout)

方式 1:运行即过滤

node app.js 2>&1 | grep "error"

方式 2:后台运行

nohup node app.js > app.log 2>&1 &

五、按日志级别过滤(常见日志库)

Winston

grep -E "error|warn" app.log

Pino(JSON)

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


六、多条件过滤

AND

grep "error" app.log | grep "database"

OR

grep -E "error|fail|crash" app.log

排除

grep -v "info" app.log

七、按请求 / 用户 / TraceId 过滤(推荐)

Node.js 中打日志时带上 traceId

logger.info({ traceId, userId, msg: 'request' })

日志过滤:

grep "traceId123" app.log

八、使用 systemd(生产环境)

若 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

十、我可以继续帮你

你可以告诉我:

  • ✅ 用的是 哪个日志库(winston / pino / 原生)
  • ✅ 日志是 文本还是 JSON
  • ✅ 日志是否 Docker / k8s
  • ✅ 想过滤 错误 / 接口 / 时间 / 用户

我可以直接给你最合适的一条命令

0