123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- 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)
- }
- }
|