如何在uber / zap记录器中动态更改日志级别

问题描述 投票:0回答:1

我的项目结构如下:

  • cmd
  • app
  • pkg
    • logger
    • config

在我的记录器程序包中,我遵循了代码的平静原则,即仅创建一个记录器并替换了zap的全局记录器

var logger *zap.Logger
var atomicLevel zap.AtomicLevel

func init() {
    lmb := config.NewLumberjack()
    atomicLevel = newAtomicLevel()
    logger = newLogger(lmb, atomicLevel)
    zap.ReplaceGlobals(logger)
    setRotation(lmb)
    onLogLevelChange()
}

func SetLevel(l string) {
    atomicLevel.SetLevel(config.ParseLevel(l))
}

并且在我放置业务逻辑的app package中的主要代码库中,有时我应该更改日志记录级别,并且这样做是这样的>]

logger.SetLevel("debug")
zap.L().Debug("Message", zap.Duration("exec_time", time.Second))

问题是我不想从另一个包中调用函数来更改完全位于不同包中的对象的行为。还有其他更好的方法可以解决此问题吗?

我的项目结构如下:cmd app pkg logger config在我的logger包中,我有以下代码平静的地方,它们仅创建Logger并替换zap的全局logger var logger * zap...。

go uber-api
1个回答
0
投票
我认为,在这种情况下,当您不想从另一个软件包切换记录器本身或使用高级设置程序包装它时,可以对记录级别进行集中式切换:
© www.soinside.com 2019 - 2024. All rights reserved.