在 Debian 上“过滤 Golang 日志”通常可以分为几种场景,下面按常见需求给你几种实用做法。
如果你的 Go 程序直接输出到终端或 systemd:
grep 过滤./myapp 2>&1 | grep ERROR
只显示 ERROR 级别日志:
./myapp | grep -E "ERROR|WARN"
排除某些日志:
./myapp | grep -v DEBUG
./myapp | grep "2026-01-21"
如果 Go 程序作为服务运行:
sudo journalctl -u mygoapp.service
按级别(如果日志带 level):
journalctl -u mygoapp.service | grep ERROR
实时查看:
journalctl -u mygoapp.service -f
按时间:
journalctl -u mygoapp.service --since "2026-01-21 10:00"
log + 级别控制log.SetFlags(log.LstdFlags)
log.Println("[ERROR] something wrong")
运行时过滤:
./myapp | grep ERROR
log/slog(Go 1.21+,强烈推荐)logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelWarn,
}))
logger.Debug("debug msg") // 不输出
logger.Error("error msg")
只输出 WARN 及以上日志。
zap
logger, _ := zap.NewProduction()
logger.Error("error")
logrus
log.SetLevel(log.WarnLevel)
如果日志写入文件:
grep ERROR /var/log/mygoapp.log
实时:
tail -f /var/log/mygoapp.log | grep ERROR
| 场景 | 做法 |
|---|---|
| 本地调试 | grep |
| systemd 服务 | journalctl |
| 生产环境 | slog / zap + 日志系统 |
| 文件日志 | tail + grep |
如果你能告诉我:
我可以给你更精确的过滤命令或配置。