config.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package conf
  2. import (
  3. "io/ioutil"
  4. "log"
  5. "os"
  6. "path/filepath"
  7. "rtzh_elec_temperature/global"
  8. "rtzh_elec_temperature/logger"
  9. "strings"
  10. "sync"
  11. "github.com/astaxie/beego"
  12. "github.com/fsnotify/fsnotify"
  13. )
  14. var GlobalConfig = map[string]string{"loglevel": "4"}
  15. var wrlock sync.RWMutex
  16. var GCWRlock sync.RWMutex
  17. func init() {
  18. ConfWatcher, err := fsnotify.NewWatcher()
  19. if err != nil {
  20. log.Fatal(err)
  21. }
  22. //done := make(chan bool)
  23. dir, _ := filepath.Abs(filepath.Dir(os.Args[0]))
  24. err = ConfWatcher.Add(dir + "/conf/app.conf")
  25. if err != nil {
  26. log.Println(err)
  27. return
  28. }
  29. log.Println("监听配置文件改动:" + dir + "/conf/app.conf,请确保本程序对文件的访问权限已正确设置!")
  30. go func() {
  31. for {
  32. select {
  33. case event := <-ConfWatcher.Events:
  34. if event.Op&fsnotify.Write == fsnotify.Write {
  35. //log.Println("modified file:", event)
  36. LoadAppConf()
  37. }
  38. case err := <-ConfWatcher.Errors:
  39. if err != nil {
  40. log.Println("error:", err)
  41. }
  42. }
  43. }
  44. ConfWatcher.Close()
  45. }()
  46. //<-done
  47. }
  48. func LoadAppConf() {
  49. GCWRlock.Lock()
  50. GlobalConfig = map[string]string{"loglevel": "4"}
  51. GCWRlock.Unlock()
  52. wrlock.Lock()
  53. fileHanlder, err := os.Open("conf/app.conf")
  54. if err != nil {
  55. logger.Logger.Error("配置文件app.conf:" + err.Error())
  56. os.Exit(1)
  57. }
  58. txt, readerr := ioutil.ReadAll(fileHanlder)
  59. if readerr != nil {
  60. log.Println(readerr.Error())
  61. os.Exit(1)
  62. }
  63. fileHanlder.Close()
  64. txtStr := string(txt)
  65. if txtStr == "" {
  66. log.Println("配置文件app.conf配置不正确,请正确配置")
  67. os.Exit(1)
  68. }
  69. kv := strings.Split(txtStr, "\n")
  70. for _, v := range kv {
  71. if strings.Trim(v, " ") == "" {
  72. continue
  73. }
  74. if strings.HasPrefix(v, "#") {
  75. continue
  76. }
  77. v1 := strings.Split(v, "#")[0]
  78. if len(v1) == 0 {
  79. continue
  80. }
  81. tmpstr := strings.Split(v1, "=")
  82. key := strings.ToLower(tmpstr[0])
  83. value := strings.Trim(v1[len(key)+1:], " ")
  84. if value != "" {
  85. GCWRlock.Lock()
  86. GlobalConfig[key] = value
  87. if key == "noauthrouter" {
  88. global.NoAuthRouter = strings.Split(value, ",")
  89. }
  90. GCWRlock.Unlock()
  91. }
  92. }
  93. wrlock.Unlock()
  94. logger.LogLevel = GlobalConfig["loglevel"]
  95. logger.Logger.Info("配置文件:conf/app.conf更改已重新加载!")
  96. if GlobalConfig["loglevel"] == "5" {
  97. beego.SetLevel(beego.LevelNotice)
  98. } else {
  99. beego.SetLevel(beego.LevelError)
  100. }
  101. }