在 Debian 上“过滤 Golang 日志内容”通常可以从 三个层面 来做,取决于你的日志是:
下面按常见场景说明。
grep 过滤./yourapp | grep "ERROR"
只看错误:
./yourapp 2>&1 | grep -i error
排除某些内容:
./yourapp | grep -v "DEBUG"
多条件(AND):
./yourapp | grep "ERROR" | grep "timeout"
多条件(OR):
./yourapp | grep -E "ERROR|WARN"
./yourapp | grep "2026-01-21 10:"
grep "ERROR" /var/log/yourapp.log
实时跟踪:
tail -f /var/log/yourapp.log | grep "ERROR"
按时间范围:
awk '/10:00:00/,/10:30:00/' /var/log/yourapp.log
如果 Golang 程序是 systemd 服务:
journalctl -u yourapp.service
journalctl -u yourapp.service | grep ERROR
journalctl -u yourapp.service -f | grep ERROR
journalctl -u yourapp.service -p err
(-p 支持:emerg, alert, crit, err, warning, notice, info, debug)
log.SetFlags(log.LstdFlags | log.Lshortfile)
或在日志中加级别:
log.Println("[ERROR] something wrong")
然后配合 grep "[ERROR]"
logruszapslog(Go 1.21+ 官方)示例(slog):
logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelError,
}))
logger.Error("db connection failed")
这样 不需要 grep,天然过滤。
如果是 JSON 日志:
cat app.log | jq 'select(.level=="error")'
| 场景 | 推荐方式 |
|---|---|
| 临时排查 | grep / journalctl -p err |
| 长期运行 | 日志级别控制 |
| 生产环境 | structured log + systemd |
| 高性能 | zap / slog |
如果你愿意,可以告诉我:
我可以给你更具体的命令或配置示例。