package conf import ( "io/ioutil" "log" "os" "path/filepath" "rtzh_elec_temperature/global" "rtzh_elec_temperature/logger" "strings" "sync" "github.com/astaxie/beego" "github.com/fsnotify/fsnotify" ) var GlobalConfig = map[string]string{"loglevel": "4"} var wrlock sync.RWMutex var GCWRlock sync.RWMutex func init() { ConfWatcher, err := fsnotify.NewWatcher() if err != nil { log.Fatal(err) } //done := make(chan bool) dir, _ := filepath.Abs(filepath.Dir(os.Args[0])) err = ConfWatcher.Add(dir + "/conf/app.conf") if err != nil { log.Println(err) return } log.Println("监听配置文件改动:" + dir + "/conf/app.conf,请确保本程序对文件的访问权限已正确设置!") go func() { for { select { case event := <-ConfWatcher.Events: if event.Op&fsnotify.Write == fsnotify.Write { //log.Println("modified file:", event) LoadAppConf() } case err := <-ConfWatcher.Errors: if err != nil { log.Println("error:", err) } } } ConfWatcher.Close() }() //<-done } func LoadAppConf() { GCWRlock.Lock() GlobalConfig = map[string]string{"loglevel": "4"} GCWRlock.Unlock() wrlock.Lock() fileHanlder, err := os.Open("conf/app.conf") if err != nil { logger.Logger.Error("配置文件app.conf:" + err.Error()) os.Exit(1) } txt, readerr := ioutil.ReadAll(fileHanlder) if readerr != nil { log.Println(readerr.Error()) os.Exit(1) } fileHanlder.Close() txtStr := string(txt) if txtStr == "" { log.Println("配置文件app.conf配置不正确,请正确配置") os.Exit(1) } kv := strings.Split(txtStr, "\n") for _, v := range kv { if strings.Trim(v, " ") == "" { continue } if strings.HasPrefix(v, "#") { continue } v1 := strings.Split(v, "#")[0] if len(v1) == 0 { continue } tmpstr := strings.Split(v1, "=") key := strings.ToLower(tmpstr[0]) value := strings.Trim(v1[len(key)+1:], " ") if value != "" { GCWRlock.Lock() GlobalConfig[key] = value if key == "noauthrouter" { global.NoAuthRouter = strings.Split(value, ",") } GCWRlock.Unlock() } } wrlock.Unlock() logger.LogLevel = GlobalConfig["loglevel"] logger.Logger.Info("配置文件:conf/app.conf更改已重新加载!") if GlobalConfig["loglevel"] == "5" { beego.SetLevel(beego.LevelNotice) } else { beego.SetLevel(beego.LevelError) } }