Go에서 널리 사용되는 로깅 라이브러리인 Zap은 구성 가능한 로깅 동작을 허용합니다. . 이 경우 로거는 기본 로깅 메커니즘으로 Zap을 사용하는 kubebuilder 유틸리티에 의해 초기화됩니다. 현재 작업은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!