温馨提示×

如何抓取debian golang日志

小樊
36
2026-09-07 06:08:28
栏目: 编程语言

在 Debian 系统上抓取 Golang 程序日志,通常有几种常见方式,取决于你的 Golang 程序是如何运行的(系统服务 / 容器 / 直接运行)以及 日志输出到哪里(stdout、文件、syslog)。

下面按常见场景说明。


一、Golang 程序以 systemd 服务运行(最推荐)

1. 编写 Golang 日志

Golang 程序通常输出到 stdout / stderr

log.Println("server started")

2. 配置 systemd 服务

/etc/systemd/system/myapp.service

[Unit]
Description=Golang App
After=network.target

[Service]
ExecStart=/opt/myapp/myapp
WorkingDirectory=/opt/myapp
User=appuser
Restart=always
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

3. 查看日志

journalctl -u myapp.service

实时查看:

journalctl -u myapp.service -f

按时间:

journalctl -u myapp.service --since "2026-01-15 10:00"

二、Golang 日志写入文件(传统方式)

1. Golang 写文件日志

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

2. 使用 logrotate(防止日志爆炸)

/etc/logrotate.d/myapp

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

3. 实时抓取日志

tail -f /var/log/myapp.log

三、Golang 使用 syslog(Debian 原生)

1. Golang 代码

import "log/syslog"

syslog.New(syslog.LOG_INFO, "myapp")
log.Println("hello syslog")

2. 查看日志

journalctl -t myapp

或旧系统:

tail -f /var/log/syslog

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

1. 直接输出 stdout

log.Println("hello docker")

2. 抓取日志

docker logs -f myapp

五、进阶:结构化日志(推荐)

使用 zaplogrus

logger, _ := zap.NewProduction()
logger.Info("user login", zap.String("user", "tom"))

日志可输出到:

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

六、总结建议

场景 推荐方式
Debian 服务 systemd + journalctl
传统部署 文件 + logrotate
容器 stdout + docker logs
生产环境 结构化日志 + 集中收集

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

  • Golang 程序运行方式(systemd / docker / 裸跑)
  • 日志当前输出位置(终端 / 文件 / 无)

我可以给你更精确的抓取方案。

0