> 백엔드 개발 > Golang > 컨트롤러 런타임에서 Zap Logger를 사용하여 로그 수준을 동적으로 업데이트하려면 어떻게 해야 합니까?

컨트롤러 런타임에서 Zap Logger를 사용하여 로그 수준을 동적으로 업데이트하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2024-11-26 08:53:09
원래의
876명이 탐색했습니다.

How Can I Dynamically Update Log Levels with Zap Logger in Controller-Runtime?

컨트롤러 런타임에서 Zap Logger를 사용한 동적 로그 수준 업데이트

컨텍스트

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿