logcfg.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "github.com/sirupsen/logrus"
  4. "lc/common/mqtt"
  5. "lc/common/protocol"
  6. "lc/common/util"
  7. )
  8. // InitLogCfg 初始化日志配置:从持久化文件加载,或使用默认值
  9. func InitLogCfg() {
  10. tl := util.GetTagLog()
  11. tl.SetPersistPath("conf/logcfg.json")
  12. if err := tl.LoadFromFile(); err != nil {
  13. tl.Infof("sys", "InitLogCfg:未找到持久化配置,使用默认debug级别,err=%v", err)
  14. tl.SetLevel(logrus.DebugLevel)
  15. } else {
  16. tl.Infof("sys", "InitLogCfg:已加载持久化配置,global=%s,tags=%v",
  17. tl.GetGlobalLevel().String(), tl.GetAllTagLevels())
  18. }
  19. }
  20. // HandleTpLogCfg 处理云端下发的日志等级配置
  21. func HandleTpLogCfg(m mqtt.Message) {
  22. tl := util.GetTagLog()
  23. tl.Infof("sys", "HandleTpLogCfg:收到日志配置,topic=%s", m.Topic())
  24. var cfg util.LogLevelConfig
  25. cfg.Tags = make(map[string]string)
  26. if err := json.Unmarshal([]byte(m.PayloadString()), &cfg); err != nil {
  27. tl.Errorf("sys", "HandleTpLogCfg:解析失败,payload=%s,err=%v", m.PayloadString(), err)
  28. return
  29. }
  30. // 设置全局级别
  31. if cfg.Level != "" {
  32. if lv, err := logrus.ParseLevel(cfg.Level); err == nil {
  33. tl.SetLevel(lv)
  34. tl.Infof("sys", "HandleTpLogCfg:全局级别已更新为%s", cfg.Level)
  35. } else {
  36. tl.Warnf("sys", "HandleTpLogCfg:无效的全局级别:%s", cfg.Level)
  37. }
  38. }
  39. // 设置 tag 级别
  40. for tag, levelStr := range cfg.Tags {
  41. if lv, err := logrus.ParseLevel(levelStr); err == nil {
  42. tl.SetTagLevel(tag, lv)
  43. tl.Infof("sys", "HandleTpLogCfg:tag[%s]级别已更新为%s", tag, levelStr)
  44. } else {
  45. tl.Warnf("sys", "HandleTpLogCfg:无效的tag级别:%s=%s", tag, levelStr)
  46. }
  47. }
  48. // 异步持久化,避免阻塞MQTT消息处理
  49. go func() {
  50. if err := tl.SaveToFile(); err != nil {
  51. tl.Errorf("sys", "HandleTpLogCfg:持久化失败,err=%v", err)
  52. }
  53. }()
  54. // 发送ACK
  55. var ack protocol.Pack_Ack
  56. if str, err := ack.EnCode(appConfig.GID, appConfig.GID, 0, nil); err == nil {
  57. topic := GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_LOG_CFG_ACK)
  58. GetMQTTMgr().Publish(topic, str, 0, ToCloud)
  59. }
  60. }