CentOS下Golang日志管理实践
一 总体思路与方案选型
二 输出到标准输出并用 systemd 管理
[Unit]
Description=My Go Application
After=network.target
[Service]
Type=simple
User=myapp
Group=myapp
ExecStart=/opt/myapp/myapp
StandardOutput=journal
StandardError=journal
Restart=always
WorkingDirectory=/opt/myapp
[Install]
WantedBy=multi-user.target
三 写入文件并用 logrotate 轮转
sudo mkdir -p /var/log/myapp
sudo chown myapp:myapp /var/log/myapp
sudo chmod 0755 /var/log/myapp
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 myapp myapp
copytruncate
}
四 在程序内使用 lumberjack 进行内置轮转
go get gopkg.in/natefinch/lumberjack.v2
package main
import (
"log"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
logger := log.New(&lumberjack.Logger{
Filename: "/var/log/myapp/app.log", // 日志路径
MaxSize: 10, // 单个文件最大 10MB
MaxBackups: 7, // 最多保留 7 个备份
MaxAge: 28, // 备份最多保留 28 天
Compress: true, // 启用压缩
}, "", log.LstdFlags)
logger.Println("hello, this is a log message")
}
五 权限与集中式日志方案