go-zap默认配置下日志缺失问题,程序执行正常而打印日志数量不符合预期

现象:

程序执行正常而打印日志数量不符合预期

 

原因:

默认配置下,日志会进行取样。

取样规则是,对于msg相同的日志,前100打印输出,之后每隔100条输出一条

Sampling: &SamplingConfig{
Initial: 100,
Thereafter: 100,
}
 

解决方案:去掉Sampling配置

config.Sampling = nil

 

默认配置信息:

// NewProductionConfig is a reasonable production logging configuration.
// Logging is enabled at InfoLevel and above.
//
// It uses a JSON encoder, writes to standard error, and enables sampling.
// Stacktraces are automatically included on logs of ErrorLevel and above.
func NewProductionConfig() Config {
    return Config{
        Level:       NewAtomicLevelAt(InfoLevel),
        Development: false,
        Sampling: &SamplingConfig{
            Initial:    100,
            Thereafter: 100,
        },
        Encoding:         "json",
        EncoderConfig:    NewProductionEncoderConfig(),
        OutputPaths:      []string{"stderr"},
        ErrorOutputPaths: []string{"stderr"},
    }
}
View Code

 

测试代码:

package main

import (
    "go.uber.org/zap"
)

func main() {

    // 默认配置
    config := zap.NewProductionConfig()
    logger, _ := config.Build()

    for i := 0; i < 1000; i++ {
        logger.Info("test log ------", zap.Any("num", i))
    }

    // 关闭取样
    config.Sampling = nil
    logger1, _ := config.Build()
    for i := 0; i < 200; i++ {
        logger1.Info("test log +++++++", zap.Any("num", i))
    }

}
View Code

 

posted @ 2023-01-31 21:35  雪梨大佬  阅读(137)  评论(0编辑  收藏  举报