温馨提示×

怎样过滤debian golang日志内容

小樊
45
2026-10-12 23:09:40
栏目: 编程语言

在 Debian 上“过滤 Golang 日志内容”通常可以从 三个层面 来做,取决于你的日志是:

  • 程序自己打印到 stdout / stderr
  • 写到文件
  • 通过 systemd / journald 管理

下面按常见场景说明。


一、程序直接输出(stdout / stderr)

1️⃣ 用 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"

2️⃣ 按时间过滤(如果日志有时间戳)

./yourapp | grep "2026-01-21 10:"

二、日志写文件(如 app.log)

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

三、使用 systemd / journald(Debian 常见)

如果 Golang 程序是 systemd 服务:

查看日志

journalctl -u yourapp.service

只过滤 ERROR

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)


四、在 Golang 代码层过滤(推荐做法)

使用标准 log + 级别

log.SetFlags(log.LstdFlags | log.Lshortfile)

或在日志中加级别:

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

然后配合 grep "[ERROR]"


使用成熟日志库(强烈推荐)

  • logrus
  • zap
  • slog(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

如果你愿意,可以告诉我:

  • Golang 用的什么日志库
  • 日志是 stdout 还是文件
  • 是否用 systemd

我可以给你更具体的命令或配置示例。

0 踩