package main import ( "github.com/sirupsen/logrus" "lc/common/mqtt" "lc/common/protocol" "lc/common/util" ) // InitLogCfg 初始化日志配置:从持久化文件加载,或使用默认值 func InitLogCfg() { tl := util.GetTagLog() tl.SetPersistPath("conf/logcfg.json") if err := tl.LoadFromFile(); err != nil { tl.Infof("sys", "InitLogCfg:未找到持久化配置,使用默认debug级别,err=%v", err) tl.SetLevel(logrus.DebugLevel) } else { tl.Infof("sys", "InitLogCfg:已加载持久化配置,global=%s,tags=%v", tl.GetGlobalLevel().String(), tl.GetAllTagLevels()) } } // HandleTpLogCfg 处理云端下发的日志等级配置 func HandleTpLogCfg(m mqtt.Message) { tl := util.GetTagLog() tl.Infof("sys", "HandleTpLogCfg:收到日志配置,topic=%s", m.Topic()) var cfg util.LogLevelConfig cfg.Tags = make(map[string]string) if err := json.Unmarshal([]byte(m.PayloadString()), &cfg); err != nil { tl.Errorf("sys", "HandleTpLogCfg:解析失败,payload=%s,err=%v", m.PayloadString(), err) return } // 设置全局级别 if cfg.Level != "" { if lv, err := logrus.ParseLevel(cfg.Level); err == nil { tl.SetLevel(lv) tl.Infof("sys", "HandleTpLogCfg:全局级别已更新为%s", cfg.Level) } else { tl.Warnf("sys", "HandleTpLogCfg:无效的全局级别:%s", cfg.Level) } } // 设置 tag 级别 for tag, levelStr := range cfg.Tags { if lv, err := logrus.ParseLevel(levelStr); err == nil { tl.SetTagLevel(tag, lv) tl.Infof("sys", "HandleTpLogCfg:tag[%s]级别已更新为%s", tag, levelStr) } else { tl.Warnf("sys", "HandleTpLogCfg:无效的tag级别:%s=%s", tag, levelStr) } } // 异步持久化,避免阻塞MQTT消息处理 go func() { if err := tl.SaveToFile(); err != nil { tl.Errorf("sys", "HandleTpLogCfg:持久化失败,err=%v", err) } }() // 发送ACK var ack protocol.Pack_Ack if str, err := ack.EnCode(appConfig.GID, appConfig.GID, 0, nil); err == nil { topic := GetTopic(protocol.DT_GATEWAY, appConfig.GID, protocol.TP_GW_LOG_CFG_ACK) GetMQTTMgr().Publish(topic, str, 0, ToCloud) } }