温馨提示×

linux nodejs日志怎么过滤

小樊
39
2026-09-17 18:15:02
栏目: 编程语言

在 Linux 下过滤 Node.js 日志,常见做法取决于日志写在哪、用的什么日志库、想在终端看还是从文件分析。下面按场景给你一套实用方法。


一、Node.js 日志常见来源

  1. 控制台输出
    • console.log / console.error
    • 直接运行:node app.js
  2. 日志文件
    • 重定向:node app.js > app.log 2>&1
    • 日志库(winston / pino / log4js)
  3. PM2 / Docker / systemd

二、终端实时过滤(最常用)

1. 只看 error 日志

node app.js 2>&1 | grep -i error

2. 排除 health check 日志

node app.js 2>&1 | grep -v "health"

3. 多条件过滤

node app.js 2>&1 | grep -E "error|warn|exception"

4. 实时查看(类似 tail -f)

node app.js 2>&1 | tee app.log | grep error

三、从日志文件过滤

1. 查看 error 行

grep -i error app.log

2. 显示前后内容(排查上下文)

grep -i -A 5 -B 5 error app.log

3. 按时间过滤(假设有时间戳)

grep "2026-01-21 10:" app.log

4. 统计错误数量

grep -c error app.log

四、Node.js 日志库过滤(推荐)

✅ 使用 winston(按级别过滤)

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info', // 只输出 info 及以上
  transports: [new winston.transports.File({ filename: 'app.log' })]
});

运行环境控制:

LOG_LEVEL=error node app.js

✅ 使用 pino(高性能)

const pino = require('pino');
const logger = pino({ level: process.env.LOG_LEVEL || 'info' });

过滤日志文件:

pino-pretty app.log | grep error

五、PM2 日志过滤

pm2 logs | grep error

只看某个服务:

pm2 logs app | grep error

六、Docker 中过滤 Node 日志

docker logs -f container_id | grep error

按时间:

docker logs --since 30m container_id

七、进阶:结构化日志过滤(JSON)

如果日志是 JSON:

cat app.log | jq 'select(.level=="error")'

八、推荐实践 ✅

  • 生产环境用日志库(winston / pino)
  • 不要只依赖 console.log
  • 日志分级:debug / info / warn / error
  • 结合 grep / jq / ELK / Loki

如果你愿意,可以告诉我:

  • 用的是 原生 console 还是 winston/pino
  • 日志是 文件 / Docker / PM2
  • 想过滤 error / 某个接口 / 某个用户

我可以直接帮你写精准过滤命令或日志配置

0