Как динамически изменить уровень журнала в Uber / Zap Logger - PullRequest
0 голосов
/ 01 ноября 2019

Структура моего проекта выглядит следующим образом:

  • 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))

Проблема в том, что я не хочу вызывать функцию из другого пакета, чтобы изменить поведение объекта, которыйнаходится полностью в другой упаковке. Есть ли другие лучшие подходы к этой проблеме?

...