温馨提示×

怎样抓取linux golang日志

小樊
46
2026-10-26 01:58:24
栏目: 编程语言

在 Linux 上抓取 Golang 程序日志,常见做法取决于日志写在哪里。下面按场景给你一套实用方案。


一、日志写到文件(最常见)

1. 直接查看日志文件

tail -f /var/log/myapp.log

2. 实时过滤关键字

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

3. 按时间抓取

grep "2026-01-15 10:" /var/log/myapp.log

二、日志输出到 stdout / stderr(容器、systemd 常见)

1. 直接用 nohup / 后台运行

./myapp > app.log 2>&1 &
tail -f app.log

2. systemd 服务

journalctl -u myapp.service -f

只看错误:

journalctl -u myapp.service -p err -f

三、Golang 程序本身如何写日志(推荐方式)

使用标准库(简单)

log.SetOutput(os.Stdout)
log.Println("server started")

使用 zap(生产推荐)

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

logger.Info("start server",
    zap.String("addr", ":8080"),
)

日志可输出到:

  • stdout(配合 journald / 容器)
  • 文件(配合 logrotate)

四、容器环境(Docker / K8s)

Docker

docker logs -f container_id

Kubernetes

kubectl logs -f pod-name

五、高级抓取方案

1. 多行日志(panic / stack)

journalctl -u myapp | grep -A 20 "panic"

2. 使用 logrotate 防止爆盘

/etc/logrotate.d/myapp

/var/log/myapp.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

3. 集中日志(生产)

  • ELK / EFK
  • Loki + Grafana
  • Fluent Bit

六、快速排查建议

✅ 先看日志在哪
✅ 是否输出到 stdout
✅ 是否有 panic 未捕获
✅ 是否权限不足写不了文件


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

  • 日志写在哪?
  • 是否是容器 / systemd?
  • 用的是哪个日志库?

我可以直接给你对应的抓取命令或配置。

0 踩