亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

go-logr 和 uber 的 zap 詳細程度有什么對應關系?

go-logr 和 uber 的 zap 詳細程度有什么對應關系?

Go
萬千封印 2022-10-10 18:06:16
我看到 Uber Zap 實現中有日志級別:    const (            // DebugLevel logs are typically voluminous, and are usually disabled in            // production.            DebugLevel Level = iota - 1            // InfoLevel is the default logging priority.            InfoLevel            // WarnLevel logs are more important than Info, but don't need individual            // human review.            WarnLevel            // ErrorLevel logs are high-priority. If an application is running smoothly,            // it shouldn't generate any error-level logs.            ErrorLevel            // DPanicLevel logs are particularly important errors. In development the            // logger panics after writing the message.            DPanicLevel            // PanicLevel logs a message, then panics.            PanicLevel            // FatalLevel logs a message, then calls os.Exit(1).            FatalLevel        ) 當我在sigs.k8s.io/controller-runtime/pkg/log/zap記錄器中設置級別時使用它,它go-logr在引擎蓋下使用:func determineLogLevel(verbosityLevel string) zapcore.Level {    var zapLevel zapcore.Level    verbosityLevel = strings.ToLower(verbosityLevel)    switch verbosityLevel {    case ERROR:        zapLevel = zapcore.ErrorLevel    case WARNING:        zapLevel = zapcore.WarnLevel    case INFO:        zapLevel = zapcore.InfoLevel    case DEBUG:        zapLevel = zapcore.DebugLevel    default:        zapLevel = zapcore.InfoLevel    }    return zapLevel}// here zap is "sigs.k8s.io/controller-runtime/pkg/log/zap"opts := zap.Options{    StacktraceLevel: ... ,    Level:           determineLogLevel("ERROR"),    Encoder:         ... ,    ZapOpts:         ...,}但也可以選擇使用logr.Logger.V.這里的水平值與 Uber Zap 的常量中的值相同嗎?( DebugLevel, InfoLevel, WarnLevel, ....)我也看到了這個:flag --zap-log-level:Zap 級別以配置日志記錄的詳細程度??梢允恰罢{試”、“信息”、“錯誤”或任何大于 0 的整數值之一,對應于增加詳細程度的自定義調試級別”此標志值是否與'szapcore.Level中的相同?sigs.k8s.iozap.Options
查看完整描述

1 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

go-logr和日志級別之間的對應關系go.uber.org/zap由下式給出:


zapLevel = -1 * logrLevel

換句話說,go-logr級別是級別的倒數zap。此信息可在go-logr/zapr包文檔中找到:


logr 中的級別對應于 Zap 中的自定義調試級別。logr 中的任何給定級別都由其在 zap ( zapLevel = -1*logrLevel) 中的倒數表示。例如 V(2) 相當于 Zap 中的日志級別 -2,而 V(1) 相當于 Zap 的 DebugLevel。


您還可以通過查看logr.Logger.Vby zaprpackage 的實現來查看關卡如何初始化的具體示例:


func (zl *zapLogger) V(level int) logr.Logger {

    return &zapLogger{

        lvl: zl.lvl - zapcore.Level(level),

        l:   zl.l,

    }

}

該方法zapr.NewLogger構造了一個zapr.zapLoggerwithlvl字段設置為zap.InfoLevel(您知道是0),因此每次調用V此實現時,它都會減去給定的 int 值,從而獲得其負數。


該標志--zap-log-level從命令行(或 k8s yaml 配置)傳遞的字符串值映射到 Uber Zap 的級別,基于以下內容:


var levelStrings = map[string]zapcore.Level{

    "debug": zap.DebugLevel,

    "info":  zap.InfoLevel,

    "error": zap.ErrorLevel,

}

然后根據上面引用的文檔的要求,將數值乘以-1然后設置為實現。logr.Logger


查看完整回答
反對 回復 2022-10-10
  • 1 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號