第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以在運行時更新 zap 記錄器的日志級別?

是否可以在運行時更新 zap 記錄器的日志級別?

Go
臨摹微笑 2022-10-10 16:54:59
我創(chuàng)建了一個記錄器kubebuilder,它基于 zap 記錄器:import (    "flag"    "github.com/gin-gonic/gin"    "net/http"    "os"    "go.uber.org/zap/zapcore"    uzap "go.uber.org/zap"    // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)    // to ensure that exec-entrypoint and run can make use of them.    _ "k8s.io/client-go/plugin/pkg/client/auth"    "k8s.io/apimachinery/pkg/runtime"    utilruntime "k8s.io/apimachinery/pkg/util/runtime"    clientgoscheme "k8s.io/client-go/kubernetes/scheme"    ctrl "sigs.k8s.io/controller-runtime"    "sigs.k8s.io/controller-runtime/pkg/healthz"    "sigs.k8s.io/controller-runtime/pkg/log/zap")var (    scheme   = runtime.NewScheme()    setupLog = ctrl.Log.WithName("setup"))var zapOpts []uzap.Option    zapOpts = append(zapOpts, uzap.AddCaller())    zapOpts = append(zapOpts, uzap.AddCallerSkip(1))    zapOpts = append(zapOpts, uzap.AddStacktrace(uzap.DebugLevel))    opts := zap.Options{        Development:     developmentFlag,        StacktraceLevel: stacktraceLevel,        Level:           level,        Encoder:         encoder,        ZapOpts:  zapOpts,    }    opts.BindFlags(flag.CommandLine)    flag.Parse()    ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))現(xiàn)在我想將日志級別更改zapcore.InfoLevel為運行時。我沒有找到任何SetLogLevel或類似的 API。我是否需要創(chuàng)建新選項然后設(shè)置新級別?我還需要用sigs.k8s.io/controller-runtime/pkg/log/zap庫設(shè)置記錄器。記錄器的接口來自go-logr并實現(xiàn)logr.Logger接口。如果我嘗試將其更改為,zapcore.NewCore我將無法再設(shè)置記錄器ctrl.SetLogger。我想保留更新所有選項zap.Options 并更改日志級別的選項,并且仍然使用來自sigs.k8s.io/controller-runtime/pkg/log/zap.可以用 sigs.k8s.io/controller-runtime/pkg/log/zap and來做sigs.k8s.io/controller-runtime嗎?
查看完整描述

2 回答

?
神不在的星期二

TA貢獻1963條經(jīng)驗 獲得超6個贊

更好的答案:正如@Oliver Dain 所建議的,使用zap.AtomicLevel. 有關(guān)詳細信息,請參閱他們的答案。

另一種選擇是創(chuàng)建具有自定義LevelEnabler功能的核心。您可以使用zap.LevelEnablerFunc將閉包轉(zhuǎn)換為zapcore.LevelEnabler.

相關(guān)文檔:

LevelEnabler 決定在記錄消息時是否啟用給定的記錄級別。

LevelEnablerFunc 是使用匿名函數(shù)實現(xiàn) zapcore.LevelEnabler 的便捷方式。

然后該函數(shù)可能會返回truefalse基于在運行時更改的其他一些變量:

  // will be actually initialized and changed at run time 

    // based on your business logic

    var infoEnabled bool 


    errorUnlessEnabled := zap.LevelEnablerFunc(func(level zapcore.Level) bool {

        // true: log message at this level

        // false: skip message at this level

        return level >= zapcore.ErrorLevel || infoEnabled

    })


    core := zapcore.NewCore(

        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),

        os.Stdout,

        errorUnlessEnabled,

    )

    logger := zap.New(core)


    logger.Info("foo") // not logged

    

    infoEnabled = true


    logger.Info("foo again") // logged

PS:這段代碼是人為的。您的程序必須在運行時實現(xiàn)初始化、值更改以及對infoEnabled變量進行適當?shù)耐剑ㄈ绻枰?/p>


您可以在操場上運行此示例:https: //play.golang.org/p/oT3nvnP1Bwc


查看完整回答
反對 回復(fù) 2022-10-10
?
Qyouu

TA貢獻1786條經(jīng)驗 獲得超11個贊

的,可以使用AtomicLevel. 從文檔:

atom := zap.NewAtomicLevel()


// To keep the example deterministic, disable timestamps in the output.

encoderCfg := zap.NewProductionEncoderConfig()

encoderCfg.TimeKey = ""


logger := zap.New(zapcore.NewCore(

    zapcore.NewJSONEncoder(encoderCfg),

    zapcore.Lock(os.Stdout),

    atom,

))

defer logger.Sync()


logger.Info("info logging enabled")

atom.SetLevel(zap.ErrorLevel)

logger.Info("info logging disabled")


查看完整回答
反對 回復(fù) 2022-10-10
  • 2 回答
  • 0 關(guān)注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號