在 Ubuntu 上过滤 Node.js 日志,常见做法取决于你日志写在哪里、用什么日志工具。下面按常见场景给你一套实用的过滤方法。
先确认日志来源:
| 场景 | 说明 |
|---|---|
| 控制台输出 | console.log / console.error |
| 文件日志 | 如 logs/app.log |
| PM2 日志 | ~/.pm2/logs/ |
| systemd 日志 | journalctl |
| Docker 日志 | docker logs |
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"
tail -f logs/app.log | grep -E "error|warn|exception"
pm2 logs
pm2 logs | grep "error"
pm2 logs app-name | grep "error"
pm2 logs app-name --lines 100
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"
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 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 统一管理
如果你愿意,可以告诉我:
我可以给你更精确的过滤命令或配置示例。