Golang日志在CentOS中的存储策略
策略总览
存储方式与取舍
| 方式 | 适用场景 | 优点 | 注意点 |
|---|---|---|---|
| 文件输出(标准库 log / logrus / zap) | 大多数服务、容器外运行 | 简单可控、性能好 | 需配合轮转,防止磁盘被占满 |
| 系统日志(journald / rsyslog) | 需要与系统日志统一、集中管理 | 统一采集、结构化元数据、便于审计 | 需配置 facility/severity,注意权限与磁盘 |
| 远程集中(rsyslog/ELK/Graylog) | 多实例、跨机房、统一检索告警 | 集中化、可检索与可视化 | 网络与带宽成本、序列化开销 |
| 应用内轮转(如 lumberjack) | 容器/无 systemd 场景 | 与应用绑定、部署简单 | 需处理信号与优雅重启、避免多进程竞争 |
| 说明:文件输出与系统日志可并行使用(例如同时写本地文件与 syslog),远程集中用于规模化与告警联动。 |
轮转与归档配置
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 myapp myapp
sharedscripts
postrotate
systemctl reload myapp.service >/dev/null 2>&1 || true
endscript
}
logrotate -d /etc/logrotate.d/myapp(语法检查),logrotate -f /etc/logrotate.d/myapp(强制执行);CentOS 通常通过 cron 定时调用主配置 /etc/logrotate.conf,无需额外添加计划任务。import "gopkg.in/natefinch/lumberjack.v2"
log.SetOutput(&lumberjack.Logger{
Filename: "/var/log/myapp/app.log",
MaxSize: 100, // 每个文件最大 100 MB
MaxBackups: 30, // 最多保留 30 个备份
MaxAge: 90, // 最多保留 90 天
Compress: true, // 启用压缩
})
目录权限与系统服务集成
mkdir -p /var/log/myapp && chown myapp:myapp /var/log/myapp;日志文件权限如 0640,仅允许属主与同组读取,降低敏感信息泄露风险。[Unit]
Description=My Go Application
After=network.target
[Service]
Type=simple
User=myapp
Group=myapp
ExecStart=/usr/local/bin/myapp
StandardOutput=journal
StandardError=journal
# 如需同时写文件,可在应用内写 /var/log/myapp/*.log
# 并配置 PermissionsStartOnly=true + ExecStartPre=mkdir -p /var/log/myapp && chown myapp:myapp /var/log/myapp
[Install]
WantedBy=multi-user.target
postrotate 触发服务 reload 以释放句柄。监控与容量管理