在 CentOS 上“过滤 Golang 日志”通常分为几种常见场景,下面按使用方式给你系统说明,你可以按需选择。
grep 过滤如果 Golang 程序日志输出到文件或终端:
# 过滤包含 ERROR 的日志
grep "ERROR" app.log
# 实时跟踪日志并过滤
tail -f app.log | grep "ERROR"
# 多个关键字(ERROR 或 WARN)
tail -f app.log | grep -E "ERROR|WARN"
# 排除某些日志
tail -f app.log | grep -v "healthcheck"
journalctl(systemd 管理的服务)如果 Golang 程序是通过 systemd 启动的:
# 查看服务日志
journalctl -u your-go-service
# 实时过滤 ERROR
journalctl -u your-go-service -f | grep ERROR
# 按时间过滤
journalctl -u your-go-service --since "2026-01-21 10:00"
如果你的日志是 JSON 格式(如 logrus、zap):
{"level":"error","msg":"db timeout","time":"2026-01-21T10:00:00Z"}
jq 过滤tail -f app.log | jq 'select(.level=="error")'
安装 jq:
yum install jq -y
logruslog.SetLevel(log.InfoLevel) // 只输出 info 及以上
zapcfg := zap.NewProductionConfig()
cfg.Level = zap.NewAtomicLevelAt(zap.InfoLevel)
rsyslogyum install rsyslog -y
配置示例:
if $programname == 'yourapp' and $msg contains 'ERROR' then /var/log/go_error.log
filebeat + ELK适合大规模日志分析。
| 需求 | 命令 |
|---|---|
| 实时看错误 | `tail -f app.log |
| 看某时间 | grep "2026-01-21 10" app.log |
| 排除心跳 | grep -v healthcheck |
| JSON 错误 | jq 'select(.level=="error")' |
如果你能告诉我:
我可以给你更精准的方案。