温馨提示×

如何过滤debian golang日志

小樊
48
2026-09-16 08:23:55
栏目: 编程语言

在 Debian 上“过滤 Golang 日志”通常分几种场景:

  • 运行中的进程日志(stdout/stderr)
  • 系统服务(systemd)管理的 Golang 程序
  • 日志文件(如 /var/log 下的文件)
  • 在代码层面过滤日志

下面按常见场景给你实用做法。


一、使用 systemd 的 Golang 服务日志(最常见)

如果你的 Golang 程序是通过 systemd 启动的:

journalctl -u your-service-name

按关键字过滤

journalctl -u your-service-name | grep ERROR

按时间过滤

journalctl -u your-service-name --since "2024-01-01" --until "2024-01-02"

实时过滤

journalctl -u your-service-name -f | grep -v DEBUG

二、过滤日志文件(如 /var/log/app.log)

grep "ERROR" /var/log/app.log

排除某些日志

grep -v "DEBUG" /var/log/app.log

多条件过滤

grep -E "ERROR|WARN" /var/log/app.log

实时跟踪

tail -f /var/log/app.log | grep ERROR

三、在 Golang 代码层面过滤日志(推荐)

使用标准库(手动过滤)

log.SetOutput(os.Stdout)

if level == "ERROR" {
    log.Println("error message")
}

使用 logrus(推荐)

import "github.com/sirupsen/logrus"

log := logrus.New()
log.SetLevel(logrus.WarnLevel) // 只输出 Warn 及以上

使用 zap(高性能)

logger, _ := zap.NewProduction()
defer logger.Sync()

logger.Info("info log")   // 可被级别控制
logger.Error("error log")

四、使用 journalctl + 日志级别(如果程序写 systemd 日志)

如果 Golang 程序使用 log/syslogsystemd 日志:

journalctl -p err -u your-service

级别:

  • err
  • warning
  • info
  • debug

五、Docker 中的 Golang 日志(如果在 Debian 上跑容器)

docker logs your-container | grep ERROR

实时:

docker logs -f your-container | grep -v DEBUG

六、实用组合示例

只看错误,实时:

journalctl -u mygoapp -f | grep ERROR

排除健康检查和心跳:

tail -f app.log | grep -v "healthcheck"

如果你能告诉我:

  • Golang 是怎么运行的(systemd / docker / 直接跑)
  • 日志写到哪里(stdout / 文件)
  • 想“过滤什么”(级别 / 关键字 / 时间)

我可以给你更精确的命令或代码配置

0