這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
前言
生產環境上所輸出的記錄層級較高不利於定位,會碰到這樣一種情境,我們改配置修改記錄層級,再重啟,以期望定位問題,然而問題重啟後不浮現了,所以熱載入配置有必要添進去。
實踐
直接上代碼:
package mainimport ( "encoding/json" "fmt" "io/ioutil" "os" "os/signal" "syscall" "time")type Config struct { Mode string `json:"Mode"`}var ( config *Config)func loadConfig() { f, err := ioutil.ReadFile("config.json") if err != nil { fmt.Println("[TEST_SIGUSR] Load config: ", err) } err = json.Unmarshal(f, &config) if err != nil { fmt.Println("[TEST_SIGUSR] Para config failed: ", err) }}func init() { loadConfig() fmt.Println("[TEST_SIGUSR] Load config;Mode: ", config.Mode) s := make(chan os.Signal, 1) signal.Notify(s, syscall.SIGUSR2) go func() { for { <-s loadConfig() fmt.Println("[TEST_SIGUSR] ReLoad config;Mode: ", config.Mode) } }()}func main() { q := make(chan os.Signal, 1) signal.Notify(q, syscall.SIGINT) for { select { case <-q: fmt.Println("[TEST_SIGUSR] ---ibye----") os.Exit(1) default: } fmt.Println("[TEST_SIGUSR] ---waiting to reload----") time.Sleep(time.Second * 2) }}
檔案目錄如下:
wenhao-MA:test_sigusr wenhao$ lltotal 4944-rw-r--r-- 1 wenhao staff 18 11 22 13:39 config.json-rwxr-xr-x 1 wenhao staff 2520352 11 22 13:41 sigusr-rw-r--r-- 1 wenhao staff 973 11 22 13:47 sigusr.go
wenhao-MA:test_sigusr wenhao$ cat config.json{"Mode":"Debug"}
編譯啟動後,修改config.json中Mode值,kill -USR2 $(pidof sigusr)
結果:
wenhao-MA:test_sigusr wenhao$./sigusr [TEST_SIGUSR] Load config;Mode: Debug[TEST_SIGUSR] ---waiting to reload----[TEST_SIGUSR] ---waiting to reload----[TEST_SIGUSR] ReLoad config;Mode: ERROR