温馨提示×

Ubuntu Nodejs日志怎么过滤

小樊
39
2026-08-05 10:11:42
栏目: 编程语言

在 Ubuntu 上过滤 Node.js 日志,常见做法取决于你日志写在哪里用什么日志工具。下面按常见场景给你一套实用的过滤方法。


一、Node.js 日志写在哪里?

先确认日志来源:

场景 说明
控制台输出 console.log / console.error
文件日志 logs/app.log
PM2 日志 ~/.pm2/logs/
systemd 日志 journalctl
Docker 日志 docker logs

二、实时过滤 Node.js 日志(最常用)

1️⃣ 使用 grep

# 查看实时日志并过滤
tail -f logs/app.log | grep "error"

# 忽略大小写
tail -f logs/app.log | grep -i "error"

# 显示前后 5 行
tail -f logs/app.log | grep -C 5 "error"

# 排除某些日志
tail -f logs/app.log | grep -v "healthcheck"

2️⃣ 过滤多个关键字

tail -f logs/app.log | grep -E "error|warn|exception"

三、PM2 日志过滤(最常见)

查看 PM2 日志

pm2 logs

过滤 PM2 日志

pm2 logs | grep "error"

只看某个应用

pm2 logs app-name | grep "error"

实时查看

pm2 logs app-name --lines 100

四、systemd 日志过滤(Node 作为服务)

journalctl -u node-app.service -f

过滤错误

journalctl -u node-app.service | grep -i error

指定时间

journalctl -u node-app.service --since "2025-01-01" --until "2025-01-02"

五、按日志级别过滤(推荐做法)

Node.js 示例(使用 Winston)

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

然后你可以:

# 只看错误日志
tail -f logs/error.log

六、按时间过滤日志

grep "2025-01-01" logs/app.log

结合 sed

sed -n '/2025-01-01 10:00/,/2025-01-01 12:00/p' logs/app.log

七、Docker 场景

docker logs -f container_id | grep "error"

八、实用组合示例

# 实时查看错误,排除健康检查
tail -f logs/app.log | grep -i error | grep -v "health"
# 统计 error 数量
grep -c "error" logs/app.log

九、建议的最佳实践 ✅

✅ 使用日志库(Winston / Pino)
✅ 分文件:error.log / access.log
✅ 使用 JSON 日志,方便 jq 过滤
✅ PM2 / systemd 统一管理


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

  • ✅ Node.js 是怎么运行的(PM2 / systemd / Docker)
  • ✅ 日志格式(普通文本 / JSON)
  • ✅ 想过滤什么(error / 请求 / 某用户)

我可以给你更精确的过滤命令或配置示例

0