在 Debian 上采集 Golang 应用日志,常见做法可分为 日志产生方式、采集方案 和 集中化处理 三层。下面按实战角度说明。
logzap(Uber,性能高)logrusslog(Go 1.21+ 官方结构化日志)示例(zap):
logger, _ := zap.NewProduction()
logger.Info("server start", zap.String("host", "0.0.0.0"))
两种主流方式:
✅ 建议:
生产环境输出到 stdout,由系统统一采集
如果你用 systemd 管理 Golang 服务:
[Unit]
Description=golang app
[Service]
ExecStart=/opt/app/app
Restart=always
User=appuser
[Install]
WantedBy=multi-user.target
journalctl -u yourapp.service -f
journalbeatrsyslog 转发适合非 systemd 或传统部署
log.SetOutput(os.OpenFile("/var/log/app/app.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644))
apt install filebeat
filebeat.inputs:
- type: log
paths:
- /var/log/app/*.log
output.elasticsearch:
hosts: ["localhost:9200"]
适合不想装额外 agent
*.* @logserver:514
Golang 日志通过 syslog 输出:
log.SetOutput(syslog.New(syslog.LOG_INFO, "app"))
| 场景 | 推荐方案 |
|---|---|
| 裸机 Debian | systemd + journald + Filebeat |
| 多服务 | 文件日志 + Filebeat |
| 容器 | stdout + Loki |
| 审计需求 | rsyslog |
logrotateTZ如果你能说明:
我可以给你一套 可直接用的配置。