Эх сурвалжийг харах

fix: 修改日志打印方式,使用zap

jerry.liang 1 жил өмнө
parent
commit
a2076d290a

+ 2 - 2
service/cmd/gen/fwh_pro.go

@@ -1,10 +1,10 @@
 package main
 
 import (
-	"fmt"
 	"fwh-toolbox-server/config"
 	"fwh-toolbox-server/database"
 
+	"go.uber.org/zap"
 	"gorm.io/gen"
 )
 
@@ -37,7 +37,7 @@ func main() {
 	cfg, _ := config.LoadConfig()
 	db, err := database.InitMySQL(cfg.MySQLDSN)
 	if err != nil {
-		fmt.Printf("Database Open Filed!")
+		zap.L().Error("Mysql Database Open Filed!", zap.String("err", err.Error()))
 		return
 	}
 

+ 2 - 2
service/controllers/mysql_controllers.go

@@ -2,7 +2,7 @@ package controllers
 
 import (
 	"context"
-	"fmt"
+	"fwh-toolbox-server/logger"
 	"fwh-toolbox-server/models/fwh_pro/query"
 	"log"
 	"time"
@@ -89,7 +89,7 @@ func GetSiteList(ctx context.Context, filter SiteListFilter, offset int, limit i
 
 	// 打印查询到的数据
 	for _, site := range siteList {
-		fmt.Printf("ID: %s, Name: %s\n", site.ID, site.Name)
+		logger.Std.Printf("ID: %s, Name: %s\n", site.ID, site.Name)
 	}
 
 	return

+ 2 - 2
service/controllers/xlogControllers.go

@@ -1,7 +1,7 @@
 package controllers
 
 import (
-	"fmt"
+	"fwh-toolbox-server/logger"
 	"fwh-toolbox-server/networkEvents"
 )
 
@@ -41,6 +41,6 @@ func GetXlogManageList(page, size uint) XlogManagePage {
 }
 
 func SendXlogCmd(uuid, cmd string) (string, error) {
-	fmt.Printf("Send xlog cmd: %s - %s\n", uuid, cmd)
+	logger.Std.Printf("Send xlog cmd: %s - %s\n", uuid, cmd)
 	return networkEvents.SendXlogCmdDate(uuid, []byte(cmd))
 }

+ 8 - 9
service/ext/api/fwh_pro/fwh_eventAlarmLog.go

@@ -1,12 +1,13 @@
 package fwh_pro
 
 import (
-	"fmt"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"time"
+
+	"go.uber.org/zap"
 )
 
 // 查询事件事件日志
@@ -33,7 +34,7 @@ func queryEventAndAlarmLog(sn string, params url.Values) ([]byte, error) {
 		finalURL,
 		nil)
 	if err != nil {
-		fmt.Println(err.Error())
+		zap.L().Error("NewRequest failed.", zap.String("err", err.Error()))
 		return nil, err
 	}
 
@@ -45,13 +46,13 @@ func queryEventAndAlarmLog(sn string, params url.Values) ([]byte, error) {
 	client := &http.Client{Timeout: 5 * time.Second}
 	resp, err := client.Do(req)
 	if err != nil {
-		fmt.Println(err.Error())
+		zap.L().Error("Do Send failed.", zap.String("err", err.Error()))
 		return nil, err
 	}
 	defer resp.Body.Close()
 
 	body, _ := io.ReadAll(resp.Body)
-	// fmt.Printf("Status: %s\nBody: %s\n", resp.Status, body)
+	// logger.Std.Printf("Status: %s\nBody: %s\n", resp.Status, body)
 	return body, nil
 }
 
@@ -79,7 +80,7 @@ func QueryAlarmSnapshotInfo(sn, logTime string, page int) ([]byte, error) {
 		finalURL,
 		nil)
 	if err != nil {
-		fmt.Println(err.Error())
+		zap.L().Error("NewRequest failed.", zap.String("err", err.Error()))
 		return nil, err
 	}
 
@@ -87,19 +88,17 @@ func QueryAlarmSnapshotInfo(sn, logTime string, page int) ([]byte, error) {
 	req.Header.Set("Content-Type", "application/json")
 	req.Header.Set("Logintoken", token)
 
-	// fmt.Println(req.Header)
-
 	// 发送请求
 	client := &http.Client{Timeout: 5 * time.Second}
 	resp, err := client.Do(req)
 	if err != nil {
-		fmt.Println(err.Error())
+		zap.L().Error("Do send failed.", zap.String("err", err.Error()))
 		return nil, err
 	}
 	defer resp.Body.Close()
 
 	body, _ := io.ReadAll(resp.Body)
-	// fmt.Printf("Status: %s\nBody: %s\n", resp.Status, body)
+	// logger.Std.Printf("Status: %s\nBody: %s\n", resp.Status, body)
 	return body, nil
 }
 

+ 8 - 6
service/ext/api/fwh_pro/fwh_login.go

@@ -9,6 +9,8 @@ import (
 	"net/http"
 	"strings"
 	"time"
+
+	"go.uber.org/zap"
 )
 
 var loginInfo LoginData = LoginData{
@@ -65,7 +67,7 @@ func Login() error {
 		"https://oss.franklinwh.com/api-user/user/login",
 		bytes.NewBuffer(jsonData))
 	if err != nil {
-		fmt.Println(err.Error())
+		zap.L().Error("NewRequest failed.", zap.String("err", err.Error()))
 		return err
 	}
 
@@ -76,13 +78,13 @@ func Login() error {
 	client := &http.Client{Timeout: 5 * time.Second}
 	resp, err := client.Do(req)
 	if err != nil {
-		fmt.Println(err.Error())
+		zap.L().Error("Do Send failed.", zap.String("err", err.Error()))
 		return err
 	}
 	defer resp.Body.Close()
 
 	body, _ := io.ReadAll(resp.Body)
-	// fmt.Printf("Status: %s\nBody: %s", resp.Status, body)
+	// logger.Std.Printf("Status: %s\nBody: %s", resp.Status, body)
 
 	var loginRes LoginResponse
 	// 反序列化(unmarshal)
@@ -130,14 +132,14 @@ func getLoginToken() string {
 		// 判断token是否过期
 		expired, err := isTokenExpired(loginInfo.Token)
 		if err != nil {
-			fmt.Println("loginInfo.Token 解析出错:", err)
+			zap.L().Error("loginInfo.Token 解析出错.", zap.String("err", err.Error()))
 			return ""
 		}
 
 		if expired {
-			fmt.Println("Token 已过期")
+			zap.L().Info("fwh Token 已过期")
 		} else {
-			// fmt.Println("Token 有效")
+			// Token 有效
 			return loginInfo.Token
 		}
 	}

+ 5 - 6
service/ext/api/fwh_pro/fwh_powerFlow.go

@@ -1,11 +1,12 @@
 package fwh_pro
 
 import (
-	"fmt"
 	"io"
 	"net/http"
 	"net/url"
 	"time"
+
+	"go.uber.org/zap"
 )
 
 // 查询站点功率流信息
@@ -28,7 +29,7 @@ func QuerySitePowerFlow(sn string, day time.Time) ([]byte, error) {
 		finalURL,
 		nil)
 	if err != nil {
-		fmt.Println(err.Error())
+		zap.L().Error("NewRequest failed.", zap.String("err", err.Error()))
 		return nil, err
 	}
 
@@ -36,18 +37,16 @@ func QuerySitePowerFlow(sn string, day time.Time) ([]byte, error) {
 	req.Header.Set("Content-Type", "application/json")
 	req.Header.Set("Logintoken", token)
 
-	// fmt.Println(req.Header)
-
 	// 发送请求
 	client := &http.Client{Timeout: 5 * time.Second}
 	resp, err := client.Do(req)
 	if err != nil {
-		fmt.Println(err.Error())
+		zap.L().Error("Do Send failed.", zap.String("err", err.Error()))
 		return nil, err
 	}
 	defer resp.Body.Close()
 
 	body, _ := io.ReadAll(resp.Body)
-	// fmt.Printf("Status: %s\nBody: %s\n", resp.Status, body)
+	// logger.Std.Printf("Status: %s\nBody: %s\n", resp.Status, body)
 	return body, nil
 }

+ 5 - 6
service/ext/api/fwh_pro/fwh_realtimeAalrm.go

@@ -1,11 +1,12 @@
 package fwh_pro
 
 import (
-	"fmt"
 	"io"
 	"net/http"
 	"net/url"
 	"time"
+
+	"go.uber.org/zap"
 )
 
 // 查询站点告警信息
@@ -28,7 +29,7 @@ func QuerySiteAlarmList(sn string) ([]byte, error) {
 		finalURL,
 		nil)
 	if err != nil {
-		fmt.Println(err.Error())
+		zap.L().Error("NewRequest failed.", zap.String("err", err.Error()))
 		return nil, err
 	}
 
@@ -36,18 +37,16 @@ func QuerySiteAlarmList(sn string) ([]byte, error) {
 	req.Header.Set("Content-Type", "application/json")
 	req.Header.Set("Logintoken", token)
 
-	// fmt.Println(req.Header)
-
 	// 发送请求
 	client := &http.Client{Timeout: 5 * time.Second}
 	resp, err := client.Do(req)
 	if err != nil {
-		fmt.Println(err.Error())
+		zap.L().Error("Do Send failed.", zap.String("err", err.Error()))
 		return nil, err
 	}
 	defer resp.Body.Close()
 
 	body, _ := io.ReadAll(resp.Body)
-	// fmt.Printf("Status: %s\nBody: %s\n", resp.Status, body)
+	// logger.Std.Printf("Status: %s\nBody: %s\n", resp.Status, body)
 	return body, nil
 }

+ 8 - 8
service/ext/api/fwh_pro/fwh_siteInfo.go

@@ -8,6 +8,8 @@ import (
 	"strconv"
 	"strings"
 	"time"
+
+	"go.uber.org/zap"
 )
 
 type SiteInfoListPayload struct {
@@ -57,7 +59,7 @@ func QuerySiteInfoList(sn []string, pageSize uint, pageNum uint) ([]byte, error)
 		"https://energy.franklinwh.com/hes-gateway/manage/selectIotFirmwareGatewayList",
 		strings.NewReader(form.Encode()))
 	if err != nil {
-		fmt.Println(err.Error())
+		zap.L().Error("NewRequest failed.", zap.String("err", err.Error()))
 		return nil, err
 	}
 
@@ -69,13 +71,13 @@ func QuerySiteInfoList(sn []string, pageSize uint, pageNum uint) ([]byte, error)
 	client := &http.Client{Timeout: 5 * time.Second}
 	resp, err := client.Do(req)
 	if err != nil {
-		fmt.Println(err.Error())
+		zap.L().Error("Do Send failed.", zap.String("err", err.Error()))
 		return nil, err
 	}
 	defer resp.Body.Close()
 
 	body, _ := io.ReadAll(resp.Body)
-	// fmt.Printf("Status: %s\nBody: %s\n", resp.Status, body)
+	// logger.Std.Printf("Status: %s\nBody: %s\n", resp.Status, body)
 	return body, nil
 }
 
@@ -102,7 +104,7 @@ func QuerySiteModeInfo(sn string) ([]byte, error) {
 		"https://energy.franklinwh.com/hes-gateway/manage/tou/getGatewayTouListV2",
 		strings.NewReader(form.Encode()))
 	if err != nil {
-		fmt.Println(err.Error())
+		zap.L().Error("NewRequest failed.", zap.String("err", err.Error()))
 		return nil, err
 	}
 
@@ -110,18 +112,16 @@ func QuerySiteModeInfo(sn string) ([]byte, error) {
 	req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
 	req.Header.Set("Logintoken", token)
 
-	// fmt.Println(req.Header)
-
 	// 发送请求
 	client := &http.Client{Timeout: 5 * time.Second}
 	resp, err := client.Do(req)
 	if err != nil {
-		fmt.Println(err.Error())
+		zap.L().Error("Do Send failed.", zap.String("err", err.Error()))
 		return nil, err
 	}
 	defer resp.Body.Close()
 
 	body, _ := io.ReadAll(resp.Body)
-	// fmt.Printf("Status: %s\nBody: %s\n", resp.Status, body)
+	// logger.Std.Printf("Status: %s\nBody: %s\n", resp.Status, body)
 	return body, nil
 }

+ 1 - 1
service/go.mod

@@ -67,7 +67,7 @@ require (
 	github.com/xdg-go/stringprep v1.0.4 // indirect
 	github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
 	go.mongodb.org/mongo-driver v1.17.4 // indirect
-	go.uber.org/multierr v1.10.0 // indirect
+	go.uber.org/multierr v1.11.0 // indirect
 	golang.org/x/crypto v0.41.0 // indirect
 	golang.org/x/mod v0.27.0 // indirect
 	golang.org/x/net v0.43.0 // indirect

+ 2 - 0
service/go.sum

@@ -152,6 +152,8 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
 go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
 go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
 go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
 go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
 go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=

+ 20 - 3
service/jobs/getAlarmSnapshot.go

@@ -4,10 +4,14 @@ import (
 	"encoding/json"
 	"fmt"
 	"fwh-toolbox-server/ext/api/fwh_pro"
+	"fwh-toolbox-server/logger"
 	"fwh-toolbox-server/types"
+	"fwh-toolbox-server/utils/files"
 	"io"
 	"net/http"
 	"os"
+
+	"go.uber.org/zap"
 )
 
 type AlarmSnapshotInfo struct {
@@ -27,7 +31,7 @@ type AlarmSnapshotInfo struct {
 type AlarmSnapshotListResponse = types.FwhPageResponse[AlarmSnapshotInfo]
 
 // 解析
-func handleAlarmSnapshot(sn, logTime, page) (uint64, []AlarmSnapshotInfo, error) {
+func handleAlarmSnapshot(sn string, logTime string, page int) (uint64, []AlarmSnapshotInfo, error) {
 	// 查询告警快照数据
 	resByte, err := fwh_pro.QueryAlarmSnapshotInfo(sn, logTime, page)
 	if err != nil {
@@ -66,9 +70,22 @@ func GetAlarmSnapshot(sn, logTime string) error {
 		snapshotList = append(snapshotList, dataList...)
 	}
 
-	// 下载快照文件
+	// 创建临时目录存储下载和解压数据
+	tempDir, err := os.MkdirTemp("", "fwhtb-alarmSnapshot-*")
+	if err != nil {
+		logger.Std.Printf("创建临时目录失败: %v\n", err)
+		return err
+	}
+	defer os.RemoveAll(tempDir) // 程序结束时清理临时目录
 
-	// 解析文件并写入数据库
+	for _, info := range snapshotList {
+		// 下载快照文件
+		if err = files.DownloadFile(info.FileUrl, tempDir+"/"+info.FileName); err != nil {
+			return err
+		}
+
+		// 解析文件并写入数据库
+	}
 
 	return nil
 }

+ 24 - 8
service/logger/logger.go

@@ -1,17 +1,33 @@
 package logger
 
 import (
-  "go.uber.org/zap"
+	"log"
+
+	"go.uber.org/zap"
 )
 
 var Log *zap.Logger
+var Sugar *zap.SugaredLogger
+var Std *log.Logger
 
 func Init(env string) error {
-  var err error
-  if env == "prod" {
-    Log, err = zap.NewProduction()
-  } else {
-    Log, err = zap.NewDevelopment()
-  }
-  return err
+	opt := zap.AddStacktrace(zap.ErrorLevel) // error 日志打印堆栈信息
+
+	var err error
+	if env == "prod" {
+		Log, err = zap.NewProduction(opt)
+	} else {
+		Log, err = zap.NewDevelopment(opt)
+	}
+
+	if err == nil {
+		Sugar = Log.Sugar()
+	}
+
+	zap.ReplaceGlobals(Log) // 全局logger,zap.L() 和 zap.S() 需要调用 ReplaceGlobals 函数才会记录日志信息
+	// 之后可以使用zap.L()代替Log,zap.S()代替Sugar
+
+	Std = zap.NewStdLog(Log) // 标准输入自动转换为 zap.logger日志
+
+	return err
 }

+ 5 - 2
service/main.go

@@ -1,7 +1,6 @@
 package main
 
 import (
-	"fmt"
 	"fwh-toolbox-server/cache"
 	"fwh-toolbox-server/config"
 	"fwh-toolbox-server/database"
@@ -30,8 +29,11 @@ func main() {
 	if err != nil {
 		panic(err)
 	}
+	defer logger.Log.Sync() // 退出前同步zap缓冲区
+
 	err = database.Init(cfg)
 	if err != nil {
+		zap.L().Error("database init failed.", zap.String("err", err.Error()))
 		panic(err)
 	}
 	cache.Init(cfg.RedisAddr)
@@ -52,13 +54,14 @@ func main() {
 	// go func() {
 	go func() {
 		if err := networkEvents.InitEvio(); err != nil {
-			fmt.Println(err.Error())
+			zap.L().Error("networkEvents init failed.", zap.String("err", err.Error()))
 			panic(err)
 		}
 	}()
 
 	err = app.Listen("localhost:" + cfg.AppPort)
 	if err != nil {
+		zap.L().Error("Port listening failed.", zap.String("err", err.Error()))
 		panic(err)
 	}
 }

+ 9 - 14
service/networkEvents/evioEvents.go

@@ -3,11 +3,13 @@ package networkEvents
 import (
 	"context"
 	"fmt"
+	"fwh-toolbox-server/logger"
 	"fwh-toolbox-server/utils"
 	"sync"
 	"time"
 
 	"github.com/tidwall/evio"
+	"go.uber.org/zap"
 )
 
 type SiteInfo struct {
@@ -52,7 +54,7 @@ func EventsClosed(c evio.Conn, err error) (action evio.Action) {
 	if connectContext := c.Context().(*ConnectContext); connectContext != nil {
 		uuid := connectContext.UUID
 		connMap.Delete(uuid)
-		fmt.Println("断开连接端口 UUID: ", uuid)
+		logger.Std.Println("断开连接端口 UUID: ", uuid)
 	}
 
 	// xlogPackageParserMap.Delete(c.RemoteAddr().String())
@@ -63,14 +65,14 @@ func EventsClosed(c evio.Conn, err error) (action evio.Action) {
 func EventsData(c evio.Conn, in []byte) (out []byte, action evio.Action) {
 	connectContext, ok := c.Context().(*ConnectContext)
 	if !ok || connectContext == nil {
-		fmt.Println("EventsData Context invalid.")
-		fmt.Println(connectContext)
+		logger.Std.Println("EventsData Context invalid.")
+		logger.Std.Println(connectContext)
 		action = evio.None
 		return
 	}
 
 	uuid := connectContext.UUID
-	fmt.Println("接收数据 UUID: ", uuid)
+	logger.Std.Println("接收数据 UUID: ", uuid)
 
 	out = nil
 
@@ -86,21 +88,18 @@ func EventsData(c evio.Conn, in []byte) (out []byte, action evio.Action) {
 		if !parser.Handshake {
 			data, err := parser.ParseXlogHandshakePackage(in)
 			if err != nil {
-				fmt.Println(err)
-				fmt.Println("握手失败")
+				zap.L().Error("握手失败", zap.String("err", err.Error()))
 			} else {
 				out, err = parser.CreateXlogHandshakePackage()
 				if err != nil {
-					fmt.Println(err)
-					fmt.Println("握手失败")
+					zap.L().Error("握手失败", zap.String("err", err.Error()))
 				} else {
 					parser.Handshake = true
 
 					connectContext.UUID = string(data.DevUuid[:])
 					connMap.Store(string(data.DevUuid[:]), c) // 保存连接
 
-					fmt.Println("握手校验")
-					fmt.Println(data.NewIv)
+					zap.L().Info("握手校验", zap.Binary("newIv", data.NewIv))
 				}
 			}
 		} else {
@@ -128,10 +127,6 @@ func GetConnectList() []SiteInfo {
 
 func SendXlogCmdDate(uuid string, data []byte) (string, error) {
 	var err error
-	// connMap.Range(func(key, value any) bool {
-	// 	fmt.Printf("%v => %v\n", key, value)
-	// 	return true // 返回 true 继续迭代
-	// })
 	if val, ok := connMap.Load(uuid); ok {
 		c := val.(evio.Conn)
 		connectContext, ok := c.Context().(*ConnectContext)

+ 14 - 11
service/routes/sitesMonitorRoutes.go

@@ -13,11 +13,11 @@
 package routes
 
 import (
-	"fmt"
 	"fwh-toolbox-server/controllers"
 	"time"
 
 	"github.com/gofiber/fiber/v2"
+	"go.uber.org/zap"
 )
 
 // 在sitesMonitorControllers.go中定义
@@ -32,6 +32,7 @@ func SitesMonitorSetup(api fiber.Router) {
 	api.Get("/sitesMonitor/manage/nameList", func(c *fiber.Ctx) error {
 		names, err := controllers.GetSiteMonitorNameList()
 		if err != nil {
+			zap.L().Error("查询站点监控管理名称表错误。", zap.String("err", err.Error()))
 			return JSONResponseNoData(c, 500, "Database read failed. (MongoDb)")
 		}
 		return JSONResponse(c, 0, "success", names)
@@ -40,9 +41,9 @@ func SitesMonitorSetup(api fiber.Router) {
 	// 获取单个监控配置
 	api.Get("/sitesMonitor/manage/config/:name", func(c *fiber.Ctx) error {
 		name := c.Params("name")
-		fmt.Println(name)
 		configList, err := controllers.GetOneSiteMonitorConfig(name)
 		if err != nil {
+			zap.L().Error("查询单个监控配置错误。", zap.String("err", err.Error()))
 			return JSONResponseNoData(c, 500, "Database read failed. (MongoDb)")
 		} else if len(configList) != 1 {
 			return JSONResponseNoData(c, 204, "User not found")
@@ -60,9 +61,9 @@ func SitesMonitorSetup(api fiber.Router) {
 				"message": "Invalid request body",
 			})
 		}
-		fmt.Println(body.Name, body.Description, body.SiteList)
 		err := controllers.UpdateSiteMonitorConfig(name, body)
 		if err != nil {
+			zap.L().Error("更新一个监控配置错误。", zap.String("err", err.Error()))
 			return JSONResponseNoData(c, 500, "Database write failed. (MongoDb)")
 		}
 		return JSONResponse(c, 0, "success", body)
@@ -80,6 +81,7 @@ func SitesMonitorSetup(api fiber.Router) {
 		}
 		err := controllers.UpdateSiteMonitorPageConfig(name, body)
 		if err != nil {
+			zap.L().Error("更新一个监控页面配置错误。", zap.String("err", err.Error()))
 			return JSONResponseNoData(c, 500, "Database write failed. (MongoDb)")
 		}
 		return JSONResponse(c, 0, "success", body)
@@ -88,9 +90,9 @@ func SitesMonitorSetup(api fiber.Router) {
 	// 删除一个监控
 	api.Delete("/sitesMonitor/manage/config/:name", func(c *fiber.Ctx) error {
 		name := c.Params("name")
-		fmt.Println(name)
 		err := controllers.DeleteSiteMonitorConfig(name)
 		if err != nil {
+			zap.L().Error("删除一个监控错误。", zap.String("err", err.Error()))
 			return JSONResponseNoData(c, 500, "Database delete failed. (MongoDb)")
 		}
 		return JSONResponseNoData(c, 0, "success")
@@ -100,6 +102,7 @@ func SitesMonitorSetup(api fiber.Router) {
 	api.Get("/sitesMonitor/manage/config", func(c *fiber.Ctx) error {
 		configList, err := controllers.GetSiteMonitorConfig()
 		if err != nil {
+			zap.L().Error("查询所有监控配置错误。", zap.String("err", err.Error()))
 			return JSONResponseNoData(c, 500, "Database read failed. (MongoDb)")
 		}
 		return JSONResponse(c, 0, "success", configList)
@@ -114,9 +117,9 @@ func SitesMonitorSetup(api fiber.Router) {
 				"message": "Invalid request body",
 			})
 		}
-		fmt.Println(body.Name, body.Description, body.SiteList)
 		err := controllers.InsertSiteMonitorConfig(body)
 		if err != nil {
+			zap.L().Error("创建一个监控配置错误。", zap.String("err", err.Error()))
 			return JSONResponseNoData(c, 500, "Database write failed. (MongoDb)")
 		}
 		return JSONResponse(c, 0, "success", body)
@@ -133,7 +136,7 @@ func SitesMonitorSetup(api fiber.Router) {
 		}
 		infoList, err := controllers.QuerySiteInfoList(body)
 		if err != nil {
-			fmt.Println("发生错误:", err)
+			zap.L().Error("查询批量站点信息表错误。", zap.String("err", err.Error()))
 			return JSONResponseNoData(c, 500, "Database write failed. (MongoDb)")
 		}
 		return JSONResponse(c, 0, "success", infoList)
@@ -148,7 +151,7 @@ func SitesMonitorSetup(api fiber.Router) {
 			PageNum:  1,
 		})
 		if err != nil {
-			fmt.Println("发生错误:", err)
+			zap.L().Error("查询单个站点信息错误。", zap.String("err", err.Error()))
 			return JSONResponseNoData(c, 500, "fwh_pro query failed.")
 		}
 		return JSONResponse(c, 0, "success", siteInfo)
@@ -159,7 +162,7 @@ func SitesMonitorSetup(api fiber.Router) {
 		site := c.Params("site")
 		siteModeInfo, err := controllers.QuerySiteModeInfo(site)
 		if err != nil {
-			fmt.Println("发生错误:", err)
+			zap.L().Error("查询单个站点工作模式信息错误。", zap.String("err", err.Error()))
 			return JSONResponseNoData(c, 500, "fwh_pro query failed.")
 		}
 		return JSONResponse(c, 0, "success", siteModeInfo)
@@ -171,13 +174,13 @@ func SitesMonitorSetup(api fiber.Router) {
 		day := c.Params("day")
 		dayTime, err := time.Parse(time.DateOnly, day)
 		if err != nil {
-			fmt.Println("发生错误:", err)
+			zap.L().Error("查询单个站点功率流参数错误。(day)", zap.String("err", err.Error()))
 			return JSONResponseNoData(c, 500, "day parament error.")
 		}
 
 		sitePowerFlow, err := controllers.QuerySitePowerFlow(site, dayTime)
 		if err != nil {
-			fmt.Println("发生错误:", err)
+			zap.L().Error("查询单个站点功率流错误。", zap.String("err", err.Error()))
 			return JSONResponseNoData(c, 500, "fwh_pro query failed.")
 		}
 		return JSONResponse(c, 0, "success", sitePowerFlow)
@@ -189,7 +192,7 @@ func SitesMonitorSetup(api fiber.Router) {
 
 		siteAlarmList, err := controllers.QuerySiteAlarmList(site)
 		if err != nil {
-			fmt.Println("发生错误:", err)
+			zap.L().Error("查询单个站点告警列表错误。", zap.String("err", err.Error()))
 			return JSONResponseNoData(c, 500, "fwh_pro query failed.")
 		}
 		return JSONResponse(c, 0, "success", siteAlarmList)

+ 2 - 2
service/routes/xlogRoutes.go

@@ -6,8 +6,8 @@
 package routes
 
 import (
-	"fmt"
 	"fwh-toolbox-server/controllers"
+	"fwh-toolbox-server/logger"
 	"strconv"
 
 	"github.com/gofiber/fiber/v2"
@@ -33,7 +33,7 @@ func XlogSetup(api fiber.Router) {
 	// 发送命令
 	api.Post("/xlog/terminal/:uuid", func(c *fiber.Ctx) error {
 		uuid := c.Params("uuid")
-		fmt.Println(uuid)
+		logger.Std.Println(uuid)
 		var body string
 		if err := c.BodyParser(&body); err != nil {
 			return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{

+ 6 - 6
service/taskQueue/taskQueue.go

@@ -3,8 +3,8 @@ package taskqueue
 import (
 	"context"
 	"encoding/json"
-	"fmt"
 	"fwh-toolbox-server/cache"
+	"fwh-toolbox-server/logger"
 	"log"
 	"time"
 
@@ -51,7 +51,7 @@ func startTaskQueueWorker() {
 			if err == redis.Nil {
 				continue
 			}
-			log.Println("XReadGroup error:", err)
+			logger.Std.Println("XReadGroup error:", err)
 			time.Sleep(time.Second)
 			continue
 		}
@@ -64,7 +64,7 @@ func startTaskQueueWorker() {
 				// 先反序列化成 map 确定 type
 				var base TaskPayloadBase
 				if err := json.Unmarshal([]byte(rawPayload), &base); err != nil {
-					log.Println("unmarshal base error:", err)
+					logger.Std.Println("unmarshal base error:", err)
 					continue
 				}
 
@@ -75,15 +75,15 @@ func startTaskQueueWorker() {
 						log.Println("unmarshal error:", err)
 						continue
 					}
-					fmt.Printf("Processing task %s: %+v\n", id, payload)
+					logger.Std.Printf("Processing task %s: %+v\n", id, payload)
 					handleTaskSiteAnalysis(payload.Payload)
 				default:
-					log.Println("Unknown task type:", base.Type)
+					logger.Std.Println("Unknown task type:", base.Type)
 				}
 
 				// 确认任务完成
 				if err := rdb.XAck(ctx, streamName, groupName, id).Err(); err != nil {
-					log.Println("XAck error:", err)
+					logger.Std.Println("XAck error:", err)
 				}
 			}
 		}

+ 3 - 4
service/taskQueue/taskSiteAnalysis.go

@@ -1,7 +1,7 @@
 package taskqueue
 
 import (
-	"fmt"
+	"fwh-toolbox-server/logger"
 	"fwh-toolbox-server/types"
 	"time"
 )
@@ -14,10 +14,9 @@ type TaskSiteAnalysis = types.TaskSiteAnalysis
 
 func handleTaskSiteAnalysis(payload TaskSiteAnalysis) {
 	// TODO 执行任务(严格顺序)
-	fmt.Printf("Processing task %s: %v\n", id, payload)
+	logger.Std.Printf("Processing task %s: %v\n", id, payload)
 	time.Sleep(3 * time.Second) // 模拟耗时
 
-	
 }
 
 func EnqueueSiteAnalysisTask(payload TaskSiteAnalysis) error {
@@ -28,7 +27,7 @@ func EnqueueSiteAnalysisTask(payload TaskSiteAnalysis) error {
 		Payload: payload,
 	}
 	if err := EnqueueTask[TaskSiteAnalysis](p); err != nil {
-		fmt.Printf("EnqueueSiteAnalysisTask - %s : %s\n", payload.Id, err.Error())
+		logger.Std.Printf("EnqueueSiteAnalysisTask - %s : %s\n", payload.Id, err.Error())
 		return err
 	}
 	return nil

+ 3 - 6
service/utils/files/compress.go

@@ -10,6 +10,8 @@ import (
 	"io"
 	"os"
 	"path/filepath"
+
+	"go.uber.org/zap"
 )
 
 // ========== ZIP ==========
@@ -347,31 +349,26 @@ func AutoExtract(srcFile, destDir string) error {
 	switch {
 	// .tar.gz / .tgz
 	case ext == ".gz" && (filepath.Ext(name[:len(name)-len(ext)]) == ".tar"):
-		fmt.Println("识别为 tar.gz")
 		return UntarGz(srcFile, destDir)
 	case ext == ".tgz":
-		fmt.Println("识别为 .tgz")
 		return UntarGz(srcFile, destDir)
 
 	// .zip
 	case ext == ".zip":
-		fmt.Println("识别为 zip")
 		return Unzip(srcFile, destDir)
 
 	// .tar
 	case ext == ".tar":
-		fmt.Println("识别为 tar")
 		return Untar(srcFile, destDir)
 
 	// .gz (单文件压缩)
 	case ext == ".gz":
-		fmt.Println("识别为 gzip")
 		destFile := filepath.Join(destDir, name[:len(name)-3]) // 去掉.gz
 		return Gunzip(srcFile, destFile)
 
 	default:
 		// 扩展名不明,尝试魔数检测
-		fmt.Println("未知扩展名,尝试魔数检测")
+		zap.L().Info("未知扩展名,尝试魔数检测")
 		return detectByMagic(srcFile, destDir)
 	}
 }

+ 2 - 2
service/utils/snowflakeID/snowflakeID.go

@@ -1,7 +1,7 @@
 package snowflakeid
 
 import (
-	"fmt"
+	"fwh-toolbox-server/logger"
 
 	"github.com/bwmarrin/snowflake"
 )
@@ -11,7 +11,7 @@ var node *snowflake.Node
 func NewSnowflakeID() int64 {
 	if node == nil {
 		if n, err := snowflake.NewNode(0); err != nil {
-			fmt.Printf("NewSnowflakeID failed. err: %s\n", err.Error())
+			logger.Std.Printf("NewSnowflakeID failed. err: %s\n", err.Error())
 			return 0
 		} else {
 			node = n

+ 0 - 2
service/utils/xlog/xlog_encrypt.go

@@ -120,8 +120,6 @@ func Aes256CbcDecrypt(cipherText []byte, iv []byte) ([]byte, error) {
 
 // 加密数据
 func (x XlogEncrypt) EncryptData(data []byte) ([]byte, error) {
-	fmt.Println("NewIv")
-	fmt.Println(x.AesIv)
 	encrypted, err := Aes256CbcEncrypt(data, x.AesIv)
 	if err != nil {
 		return nil, err

+ 10 - 11
service/utils/xlog/xlog_package.go

@@ -5,6 +5,7 @@ import (
 	"encoding/binary"
 	"errors"
 	"fmt"
+	"fwh-toolbox-server/logger"
 	"strings"
 )
 
@@ -72,8 +73,6 @@ func (parser *XlogPackageParser) ParseXlogHandshakePackage(raw []byte) (*XlogHan
 		return nil, err
 	}
 
-	fmt.Println(string(bytes.TrimRight(h.DevUuid[:], "\x00")))
-
 	// 更新IV
 	if err := parser.crypt.SetNewIv(h.NewIv[:]); err != nil {
 		return nil, err
@@ -125,7 +124,7 @@ func (parser *XlogPackageParser) PreparserXlogPackage(raw []byte) {
 
 // 处理设备心跳信息
 func (parser XlogPackageParser) handleHeartbeat(raw []byte) {
-	fmt.Printf("%s - 接收到心跳:%s", parser.ctx.UUID, string(raw))
+	logger.Std.Printf("%s - 接收到心跳:%s", parser.ctx.UUID, string(raw))
 }
 
 // 处理设备基本信息
@@ -134,14 +133,14 @@ func (parser XlogPackageParser) handleSiteBaseInfo(raw []byte) {
 	infoReader := bytes.NewReader(raw)
 	var info XlogSiteBaseInfo
 	if err := binary.Read(infoReader, binary.LittleEndian, &info); err != nil {
-		fmt.Printf("handleSiteBaseInfo failed: %s\n", err)
+		logger.Std.Printf("handleSiteBaseInfo failed: %s\n", err)
 		return
 	}
 
 	// 更新SN
 	parser.ctx.SN = string(bytes.TrimRight(info.SN[:], "\x00"))
-	fmt.Printf("update SN: %s\n", parser.ctx.SN)
-	fmt.Println("握手成功")
+	logger.Std.Printf("update SN: %s\n", parser.ctx.SN)
+	logger.Std.Println("握手成功")
 }
 
 // 处理命令执行结果
@@ -152,10 +151,10 @@ func (parser *XlogPackageParser) handleCmdResult(raw []byte) {
 		select {
 		case parser.ctx.DoneChan <- parser.cmdResultStr:
 			// 成功写入结果
-			fmt.Printf("%s - 回传结果:%s\n", parser.ctx.UUID, parser.cmdResultStr)
+			logger.Std.Printf("%s - 回传结果:%s\n", parser.ctx.UUID, parser.cmdResultStr)
 		default:
 			// channel 已经满(说明调用方可能已经超时退出了)
-			fmt.Printf("%s - DoneChan已满或超时。\n", parser.ctx.UUID)
+			logger.Std.Printf("%s - DoneChan已满或超时。\n", parser.ctx.UUID)
 		}
 	} else {
 		parser.cmdResultStr = resStr
@@ -167,7 +166,7 @@ func (parser *XlogPackageParser) ParseXlogPackage(raw []byte) {
 	// 数据长度校验
 	headerPackageSize := binary.Size(XlogPackageHeader{})
 	if len(raw) < headerPackageSize {
-		fmt.Printf("invalid packet: data length error, expected >= %d, got %d\n", headerPackageSize, len(raw))
+		logger.Std.Printf("invalid packet: data length error, expected >= %d, got %d\n", headerPackageSize, len(raw))
 		return
 	}
 
@@ -177,7 +176,7 @@ func (parser *XlogPackageParser) ParseXlogPackage(raw []byte) {
 	// 解析头部
 	var h XlogPackageHeader
 	if err := binary.Read(headerReader, binary.LittleEndian, &h); err != nil {
-		fmt.Printf("XlogPackage header parsing error: %s\n", err.Error())
+		logger.Std.Printf("XlogPackage header parsing error: %s\n", err.Error())
 		return
 	}
 
@@ -187,7 +186,7 @@ func (parser *XlogPackageParser) ParseXlogPackage(raw []byte) {
 		// 解密Payload
 		bodyRaw, err := parser.crypt.DecryptData(encryptRaw)
 		if err != nil {
-			fmt.Println("DecryptData error: " + err.Error())
+			logger.Std.Println("DecryptData error: " + err.Error())
 			return
 		}