温馨提示×

怎样抓取debian golang日志

小樊
45
2026-09-04 01:46:22
栏目: 编程语言

在 Debian 上“抓取 Golang 日志”通常指以下几种场景之一,下面按常见用法分别说明,你可以对照自己的情况选择。


一、Golang 程序自身写日志(最常见)

1. 程序直接输出到 stdout / stderr

如果是用 log.Println / fmt.Println 等:

log.Println("hello")

Debian 上运行方式:

./myapp > /var/log/myapp.log 2>&1 &

查看日志:

tail -f /var/log/myapp.log

2. 使用 log 文件(代码中写文件)

log.SetOutput(os.OpenFile("/var/log/myapp.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644))

直接读取:

tail -f /var/log/myapp.log

二、通过 systemd 抓取 Golang 日志(推荐)

如果你在 Debian 上用 systemd 管理服务:

1. 编写 service 文件

# /etc/systemd/system/myapp.service
[Unit]
Description=Golang App
After=network.target

[Service]
ExecStart=/opt/myapp/myapp
User=myapp
Restart=always

[Install]
WantedBy=multi-user.target

2. 启动服务

systemctl daemon-reload
systemctl start myapp
systemctl enable myapp

3. 抓取日志(核心)

journalctl -u myapp -f

查看历史:

journalctl -u myapp --since "2024-01-01"

三、用第三方日志库(更专业)

常见库

  • logrus
  • zap
  • slog(Go 1.21+)

示例(zap):

logger, _ := zap.NewProduction()
logger.Info("server started")

日志位置由配置决定,可输出到:

  • stdout(被 systemd 抓取)
  • 文件
  • 远程(如 ELK / Loki)

四、实时“抓取”运行中日志(调试)

1. 实时跟踪

tail -f /var/log/myapp.log

2. 过滤关键字

grep ERROR /var/log/myapp.log

3. 查看某个进程输出

strace -e write -p <pid>

五、容器中的 Golang 日志(Docker)

docker logs -f myapp

六、常见问题排查

没日志?

  • 确认是否输出到 stdout
  • 检查 systemd 是否吞掉日志
  • 查看权限:/var/log 是否可写

七、我可以进一步帮你

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

  1. Golang 程序怎么运行的(直接跑 / systemd / Docker)
  2. 日志是 stdout 还是文件
  3. 想要实时查看还是采集分析

我可以给你一套精确方案(包括日志轮转、ELK / Loki 方案)。

0