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