Zap 是Go 中流行的日誌庫,允許配置日誌記錄行為。在這種情況下,記錄器由 kubebuilder 實用程式初始化,該實用程式使用 Zap 作為其底層日誌記錄機制。目前的任務是在運行時動態調整正在運行的應用程式的日誌級別,同時保持 sigs.k8s.io/controller-runtime/pkg/log/zap 庫的使用。
sigs.k8s.io/controller-runtime/pkg/log/zap 庫不提供簡單的 API 來在運行時更新日誌等級。然而,Zap 透過其 zap.NewAtomicLevel() 函數提供了一個解決方案。此函數會建立一個可以在運行時動態設定的原子級別,如以下程式碼片段所示:
import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" ) func main() { // Create an atomic level. atom := zap.NewAtomicLevel() // Configure the logger with the atomic level. logger := zap.New(zapcore.NewCore( zapcore.NewJSONEncoder(zapcore.NewProductionEncoderConfig()), zapcore.Lock(os.Stdout), atom, )) // Set initial log level. atom.SetLevel(zapcore.InfoLevel) // Log a message at the set level. logger.Info("Info message") // Change the log level at runtime. atom.SetLevel(zapcore.ErrorLevel) // Log another message at the new level. logger.Info("Info message after level change") }
在以下上下文中實作此解決方案在控制器運作時,將現有的ctrl.SetLogger 呼叫替換為以下修改後的程式碼:
// Initialize the atomic level. atom := zap.NewAtomicLevel() // Configure the logger with the atomic level. logger := zap.New(zapcore.NewCore( zapcore.NewJSONEncoder(zapcore.NewProductionEncoderConfig()), zapcore.Lock(os.Stdout), atom, )) // Bind the flags to the options. opts.BindFlags(flag.CommandLine) flag.Parse() // Set the logger with the modified options and atomic level. ctrl.SetLogger(logger, opts)
此修改確保記錄器kubebuilder初始化使用原子級別,讓您在運行時動態更新日誌級別。
以上是如何在控制器執行時間中使用 Zap Logger 動態更新日誌等級?的詳細內容。更多資訊請關注PHP中文網其他相關文章!