在Debian系統中,Golang日志輪轉推薦結合系統工具與第三方庫,實現高效管理。以下是兩種主流方案及最佳實踐:
適用場景:需統一管理多個服務日志,或需與系統日志集成。
配置步驟:
sudo apt-get update && sudo apt-get install logrotate
/etc/logrotate.d/下新建文件(如golang-app),內容示例:/var/log/myapp/*.log {
daily # 每天輪轉
rotate 7 # 保留7天日志
compress # 壓縮舊日志(gzip)
missingok # 忽略不存在的日志文件
notifempty # 非空文件才輪轉
create 0640 root adm # 新日志文件權限
}
sudo logrotate -d /etc/logrotate.d/golang-app # 測試配置
sudo systemctl restart logrotate # 重啟服務(自動運行)
優勢:系統級集成、低侵入性,適合生產環境。
適用場景:需在代碼中精細控制日志格式或輪轉邏輯(如按日期分割)。
推薦組合:zap(高性能)+ lumberjack(輪轉功能)。
配置示例:
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
// 配置lumberjack輪轉參數
lumberjackLogger := &lumberjack.Logger{
Filename: "/var/log/myapp/app.log",
MaxSize: 100, // 單個文件最大100MB
MaxBackups: 10, // 保留10個備份
MaxAge: 30, // 保留30天
Compress: true, // 啟用壓縮
LocalTime: true, // 使用本地時間命名
}
// 綁定到zap日志框架
core := zapcore.NewCore(
zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
zapcore.AddSync(lumberjackLogger),
zap.InfoLevel,
)
logger := zap.New(core)
defer logger.Sync()
logger.Info("日志輪轉配置生效")
}
關鍵參數說明:
MaxSize:單個日志文件超過指定大?。∕B)時觸發輪轉。MaxBackups:保留的舊日志文件數量,避免磁盤占滿。MaxAge:舊日志保留天數,配合compress壓縮節省空間。logrotate,簡單統一。zap+lumberjack。/var/log/myapp),并設置合理權限(如0755)。ls -lh /var/log/myapp)。