温馨提示×

怎样过滤debian golang日志

小樊
35
2026-09-01 05:22:12
栏目: 编程语言

在 Debian 上“过滤 Golang 日志”通常可以分为几种场景,下面按常见需求给你几种实用做法。


一、过滤 Golang 程序自身打印的日志(命令行)

如果你的 Go 程序直接输出到终端或 systemd:

1️⃣ 用 grep 过滤

./myapp 2>&1 | grep ERROR

只显示 ERROR 级别日志:

./myapp | grep -E "ERROR|WARN"

排除某些日志:

./myapp | grep -v DEBUG

2️⃣ 按时间过滤

./myapp | grep "2026-01-21"

二、过滤 systemd 管理的 Golang 服务日志(推荐)

如果 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"

三、在 Go 代码里过滤日志(最规范)

1️⃣ 使用标准库 log + 级别控制

log.SetFlags(log.LstdFlags)
log.Println("[ERROR] something wrong")

运行时过滤:

./myapp | grep ERROR

2️⃣ 使用 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 及以上日志。


3️⃣ 使用 zap / logrus

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

五、进阶(生产环境推荐)

  • 使用 rsyslog / vector / fluentd 做日志分级
  • 使用 Loki + Grafana
  • 使用 JSON 日志 + 字段过滤

总结(快速选择)

场景 做法
本地调试 grep
systemd 服务 journalctl
生产环境 slog / zap + 日志系统
文件日志 tail + grep

如果你能告诉我:

  • 日志输出方式(终端 / 文件 / systemd)
  • 是否使用框架(gin、zap、logrus)

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

0