Go で人気のログ ライブラリである Zap により、構成可能なログ動作が可能になります。この場合、ロガーは 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 中国語 Web サイトの他の関連記事を参照してください。