package iotLog import ( "IotAdmin/core/sdk/config" "IotAdmin/core/tools/writer" iotStruct "IotAdmin/iot/struct" "encoding/json" "log" "strings" "time" ) func init() { mp = make(map[string]*writer.FileWriter) } // LogData 记录数据日志 func LogData(data *iotStruct.CollectData, cfg *iotStruct.ReportConfig, dataStr *string) { output := getWrite(data) logData := &iotStruct.LogData{ Time: time.Now().Format("20060102150400"), No: data.SlaveConfig.No, Data: *data, ReportHost: cfg.Host, ReportProtocol: cfg.Protocol, ReportMn: cfg.MN, ReportUser: cfg.User, ReportPwd: cfg.Pwd, ReportStr: *dataStr, } str, err := json.Marshal(logData) if err != nil { log.Printf("Report Log Marshal error: %s \r\n", err.Error()) return } _, err = output.Write(str) if err != nil { log.Printf("Report Log Write error: %s \r\n", err.Error()) return } _, err = output.Write([]byte("\r\n")) } var mp map[string]*writer.FileWriter func getWrite(data *iotStruct.CollectData) *writer.FileWriter { path := getDataLogPath() path += strings.ReplaceAll(data.SlaveConfig.No, "_", "/") var output *writer.FileWriter var ok bool if output, ok = mp[path]; !ok { var err error output, err = writer.NewFileWriter( writer.WithPath(path), // 不切割文件 writer.WithCap(0), writer.WithSuffix(".data"), ) if err != nil { log.Printf("Report Log setup error: %s \r\n", err.Error()) } mp[path] = output } return output } func getDataLogPath() string { path := config.ApplicationConfig.DataLogFile if path == "" { path = "./_data/iot/" } else if path[len(path)-1] != '/' { path += "/" } return path }