在 CentOS 上采集 Golang 应用日志,常见做法有几种,取决于你的日志输出方式(stdout/stderr、文件)和采集工具(rsyslog、filebeat、fluentd、loki 等)。下面按常见场景给你一套实用方案。
/var/log/myapp/app.logpackage main
import (
"log"
)
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("hello centos log")
}
vim /etc/systemd/system/myapp.service
[Unit]
Description=My Golang App
After=network.target
[Service]
ExecStart=/opt/myapp/myapp
Restart=always
User=appuser
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start myapp
journalctl -u myapp -f
✅ 优点:日志自动被 journald 收集
logFile, _ := os.OpenFile("/var/log/myapp/app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(logFile)
vim /etc/rsyslog.d/myapp.conf
module(load="imfile")
input(type="imfile"
File="/var/log/myapp/app.log"
Tag="myapp"
Facility="local0")
systemctl restart rsyslog
查看:
tail -f /var/log/messages
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/filebeat.repo
[filebeat]
name=Filebeat
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
enabled=1
yum install filebeat -y
vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
paths:
- /var/log/myapp/*.log
output.elasticsearch:
hosts: ["http://localhost:9200"]
systemctl enable --now filebeat
FROM golang:1.21
COPY . .
CMD ["./myapp"]
docker logs -f myapp
/var/lib/docker/containers/*| 场景 | 推荐方案 |
|---|---|
| 容器 | stdout + Loki / ELK |
| 物理机 | systemd journal + Filebeat |
| 传统系统 | 日志文件 + rsyslog / Filebeat |
-o short-iso/var/log/myapp/*.log {
daily
rotate 7
compress
}
如果你能告诉我:
我可以直接给你一套完整配置。