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 關注
- 254 瀏覽
添加回答
舉報