1 回答
TA贡献1815条经验 获得超6个赞
我认为在这种情况下,当您不想从另一个包切换记录器本身或用高级设置器包装它时,您可以对日志记录级别进行集中切换:
1) 为记录器注册 ServeHTTP,您应该在其中传递记录器的 AtomicLevel。
2) 与第 1) 点方法相同,但使用系统信号(例如 USR2)切换电平。您需要将代码放置在无限循环选择中等待信号(SIGKILL、SIGTERM 和 USR2),如下所示:
for {
select {
case usrSig := <-WaitForOsUser2Signal():
// here you can switch your global logger level with atomicLevel
atomicLevel.SetLevel(zap.ErrorLevel)
case sig := <-WaitForOsStopProcessSignals():
// here you should handle graceful shutdown of your app
return
}
}
select块的功能实现:
func WaitForOsStopProcessSignals() <-chan os.Signal {
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
return sigCh
}
func WaitForOsUser2Signal() <-chan os.Signal {
usr2Ch := make(chan os.Signal, 1)
signal.Notify(usr2Ch, syscall.SIGUSR2)
return usr2Ch
}
希望这会有所帮助。
- 1 回答
- 0 关注
- 168 浏览
添加回答
举报