From f373cf956d05f48d1e917f6019230ed3533ee05d Mon Sep 17 00:00:00 2001 From: oneao Date: Sat, 16 Aug 2025 17:29:46 +0800 Subject: [PATCH] u --- .../inspectionProfiles/Project_Default.xml | 10 + .../go-project/base-farmework/cmd/app/main.go | 5 - .../internal/app/handle/test.go | 16 -- .../base-farmework/internal/app/router.go | 1 + .../base-farmework/logs/error-2025-08-15.log | 55 ----- .../base-farmework/logs/error-2025-08-16.log | 101 +++++++++ .../base-farmework/logs/info-2025-08-15.log | 112 ---------- .../base-farmework/logs/info-2025-08-16.log | 200 ++++++++++++++++++ ...arn-2025-08-15.log => warn-2025-08-16.log} | 0 .../base-farmework/pkg/logx/field.go | 1 - .../go-project/base-farmework/pkg/logx/log.go | 87 ++++---- .../base-farmework/pkg/middleware/auth.go | 2 - .../base-farmework/pkg/middleware/error.go | 31 ++- .../base-farmework/pkg/middleware/logger.go | 11 +- .../base-farmework/pkg/middleware/routinex.go | 13 ++ .../base-farmework/pkg/reponse/response.go | 3 +- .../base-farmework/pkg/router/context.go | 13 +- .../base-farmework/pkg/routinex/routinex.go | 72 +++++++ .../base-farmework/pkg/utils/db/select.go | 46 ++-- .../pkg/utils/{ => error}/error.go | 10 +- .../pkg/utils/strutil/strutil.go | 53 +++++ code/sllog/Sllog-User-Api/.idea/vcs.xml | 6 + 22 files changed, 568 insertions(+), 280 deletions(-) create mode 100644 code/go-project/base-farmework/.idea/inspectionProfiles/Project_Default.xml delete mode 100644 code/go-project/base-farmework/logs/error-2025-08-15.log create mode 100644 code/go-project/base-farmework/logs/error-2025-08-16.log delete mode 100644 code/go-project/base-farmework/logs/info-2025-08-15.log create mode 100644 code/go-project/base-farmework/logs/info-2025-08-16.log rename code/go-project/base-farmework/logs/{warn-2025-08-15.log => warn-2025-08-16.log} (100%) create mode 100644 code/go-project/base-farmework/pkg/middleware/routinex.go create mode 100644 code/go-project/base-farmework/pkg/routinex/routinex.go rename code/go-project/base-farmework/pkg/utils/{ => error}/error.go (85%) create mode 100644 code/go-project/base-farmework/pkg/utils/strutil/strutil.go create mode 100644 code/sllog/Sllog-User-Api/.idea/vcs.xml diff --git a/code/go-project/base-farmework/.idea/inspectionProfiles/Project_Default.xml b/code/go-project/base-farmework/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..32351ec7 --- /dev/null +++ b/code/go-project/base-farmework/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/code/go-project/base-farmework/cmd/app/main.go b/code/go-project/base-farmework/cmd/app/main.go index 2442190f..92ad622e 100644 --- a/code/go-project/base-farmework/cmd/app/main.go +++ b/code/go-project/base-farmework/cmd/app/main.go @@ -4,7 +4,6 @@ import ( "base-framework/internal/app" "base-framework/pkg/config" "base-framework/pkg/logx" - "base-framework/pkg/utils/uid" "log" "net/http" "strconv" @@ -23,10 +22,6 @@ func main() { } // 初始化日志 logx.InitLogger() - logx.Logger.Info("项目启动成功...", logx.Uint64("id", uid.NextID())) - logx.Logger.Info("项目启动成功2...") - - logx.Logger.Error("测试错误") // 初始化路由 r := app.InitAppRouter() diff --git a/code/go-project/base-farmework/internal/app/handle/test.go b/code/go-project/base-farmework/internal/app/handle/test.go index 1fe30874..ef867fc7 100644 --- a/code/go-project/base-farmework/internal/app/handle/test.go +++ b/code/go-project/base-farmework/internal/app/handle/test.go @@ -4,27 +4,11 @@ import ( "base-framework/pkg/reponse" "base-framework/pkg/router" "base-framework/pkg/utils/db" - "fmt" ) func Test(c *router.Context) { - dbClient := db.NewClient(c) if dbClient == nil { return } - - sqlStr := "SELECT id, name FROM user" - rows, err := dbClient.QueryRows(sqlStr) - - if err != nil { - c.AddError(err) - return - } - - for _, row := range rows { - fmt.Println(row["id"], row["name"]) - } - - reponse.Success(c).Data(rows).Send() } diff --git a/code/go-project/base-farmework/internal/app/router.go b/code/go-project/base-farmework/internal/app/router.go index ce5de1e0..ecd3a4fb 100644 --- a/code/go-project/base-farmework/internal/app/router.go +++ b/code/go-project/base-farmework/internal/app/router.go @@ -9,6 +9,7 @@ import ( func InitAppRouter() *router.Router { r := router.NewRouter() + r.Use(middleware.Routinex()) r.Use(middleware.Error()) r.Use(middleware.Auth()).ExcludePaths("/auth/login") r.Use(middleware.Logger()) diff --git a/code/go-project/base-farmework/logs/error-2025-08-15.log b/code/go-project/base-farmework/logs/error-2025-08-15.log deleted file mode 100644 index 94873437..00000000 --- a/code/go-project/base-farmework/logs/error-2025-08-15.log +++ /dev/null @@ -1,55 +0,0 @@ -{"level":"ERROR","ts":"2025-08-15 14:58:22","caller":"app/main.go:29","msg":"测试错误..."} -2025-08-15 15:01:57 ERROR app/main.go:29 测试错误... -ERROR app/main.go:29 测试错误... -2025-08-15 15:21:51.058 ERROR app/main.go:29 测试错误... -ERROR app/main.go:29 测试错误... -ERROR app/main.go:29 测试错误... -ERROR app/main.go:29 测试错误... -2025-08-15 15:26:50 ERROR app/main.go:29 测试错误... -2025-08-15 15:27:34 ERROR app/main.go:29 测试错误... -2025-08-15 15:31:13.135 ERROR app/main.go:29 测试错误... -2025-08-15 15:34:43.374 ERROR 15832 --- app/main.go:29 测试错误... -2025-08-15 15:35:09.214 ERROR 3820 --- app/main.go:29 测试错误... -2025-08-15 15:44:29.342 ERROR 5068 --- app/main.go:29 : 测试错误... -2025-08-15 15:50:13.811 ERROR 10980 --- app/main.go:29 : 测试错误... -2025-08-15 15:50:21.047 ERROR 14588 --- app/main.go:29 : 测试错误... -2025-08-15 15:50:44.946 ERROR 4664 --- app/main.go:29 : 测试错误... -2025-08-15 15:50:53.440 ERROR 16332 --- app/main.go:29 : 测试错误... -2025-08-15 16:00:58.286 ERROR 5928 --- app/main.go:29 : 测试错误... -2025-08-15 16:04:36.926 ERROR 1616 --- app/main.go:29: 测试错误... -2025-08-15 16:15:11.023 ERROR 3956 --- app/main.go:29: 测试错误 -{"level":"ERROR","ts":"2025-08-15 16:15:30.845","caller":"app/main.go:29","msg":"测试错误"} -{"level":"ERROR","ts":"2025-08-15 17:16:36.736","caller":"app/main.go:29","msg":"测试错误"} -{"level":"ERROR","ts":"2025-08-15 17:22:15.508","caller":"app/main.go:29","msg":"测试错误"} -{"level":"ERROR","ts":"2025-08-15 17:22:27.021","caller":"app/main.go:29","msg":"测试错误"} -{"level":"ERROR","ts":"2025-08-15 17:22:46.606","caller":"app/main.go:29","msg":"测试错误"} -{"level":"ERROR","ts":"2025-08-15 17:22:54.954","caller":"app/main.go:29","msg":"测试错误"} -{"level":"ERROR","ts":"2025-08-15 17:24:12.726","caller":"app/main.go:29","msg":"测试错误"} -{"level":"ERROR","ts":"2025-08-15 17:24:34.956","caller":"app/main.go:29","msg":"测试错误"} -2025-08-15 17:24:58.277 ERROR 14832 app/main.go:29 测试错误 -2025-08-15 17:26:22.912 ERROR 6312 --- app/main.go:29 测试错误 -2025-08-15 17:26:33.441 ERROR 1184 --- app/main.go:29 测试错误 -2025-08-15 17:26:41.369 ERROR 7592 --- app/main.go:29 测试错误 -2025-08-15 17:26:57.052 ERROR 15240 --- app/main.go:29 测试错误 -2025-08-15 17:29:02.042 ERROR 14256 --- app/main.go:29 测试错误 -2025-08-15 17:29:14.451 ERROR 15400 --- app/main.go:29 测试错误 -2025-08-15 17:29:25.539 ERROR 16328 --- app/main.go:29 测试错误 -2025-08-15 17:29:54.048 ERROR 4840 --- app/main.go:29 测试错误 -2025-08-15 17:30:34.451 ERROR 6412 --- app/main.go:29 测试错误 -2025-08-15 17:30:45.526 ERROR 216 --- app/main.go:29 测试错误 -2025-08-15 17:30:58.865 ERROR 14788 --- app/main.go:29 测试错误 -2025-08-15 20:20:43.212 ERROR 36240 --- app/main.go:29 测试错误 -2025-08-15 20:22:59.824 ERROR 20504 --- app/main.go:29 测试错误 -2025-08-15 20:23:20.618 ERROR 26140 --- app/main.go:29 测试错误 -2025-08-15 20:23:40 ERROR 10016 --- app/main.go:29 测试错误 -2025-08-15 20:27:44.044 ERROR 29060 --- app/main.go:29: 测试错误 -2025-08-15 20:30:58.422 ERROR ...- app/main.go:29: 测试错误 -2025-08-15 20:31:14.222 ERROR 15492 --- app/main.go:29: 测试错误 -2025-08-15 20:31:31.003 ERROR 34092 --- app/main.go:29 测试错误 -2025-08-15 20:31:48.042 ERROR 24436 --- app/main.go:29 测试错误 -2025-08-15 20:32:05.156 ERROR 36992---app/main.go:29 测试错误 -2025-08-15 20:32:13.911 ERROR 860 - app/main.go:29 测试错误 -2025-08-15 20:32:32.059 ERROR [16248] - app/main.go:29 测试错误 -2025-08-15 20:32:41.937 ERROR [12140] app/main.go:29 测试错误 -2025-08-15 22:25:29.409 ERROR [23208] app/main.go:29 测试错误 {"log_id": 347022995107086338} -2025-08-15 22:25:47.684 ERROR [23380] app/main.go:29 测试错误 {"log_id": 347023071757991941} diff --git a/code/go-project/base-farmework/logs/error-2025-08-16.log b/code/go-project/base-farmework/logs/error-2025-08-16.log new file mode 100644 index 00000000..b9ca52b2 --- /dev/null +++ b/code/go-project/base-farmework/logs/error-2025-08-16.log @@ -0,0 +1,101 @@ +{"level":"ERROR","ts":"2025-08-16 15:41:41.925","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283765535440896"} +{"level":"ERROR","ts":"2025-08-16 15:41:41.972","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283765732573184"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.053","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283766059728896"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.115","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283766319775744"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.181","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283766613377024"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.249","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283766877618176"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.305","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283767133470720"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.372","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283767414489088"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.451","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283767729061888"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.507","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283767980720128"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.564","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283768219795456"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.624","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283768471453696"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.715","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283768848941056"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.758","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283769029296128"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.786","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283769146736640"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.873","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283769515835392"} +{"level":"ERROR","ts":"2025-08-16 15:41:42.957","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283769868156928"} +{"level":"ERROR","ts":"2025-08-16 15:41:43.032","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283770178535424"} +{"level":"ERROR","ts":"2025-08-16 15:41:43.092","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283770434387968"} +{"level":"ERROR","ts":"2025-08-16 15:41:43.292","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283771273248768"} +{"level":"ERROR","ts":"2025-08-16 15:41:43.342","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283771478769664"} +{"level":"ERROR","ts":"2025-08-16 15:41:43.406","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283771747205120"} +{"level":"ERROR","ts":"2025-08-16 15:41:43.487","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283772091138048"} +{"level":"ERROR","ts":"2025-08-16 15:41:43.540","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283772309241856"} +{"level":"ERROR","ts":"2025-08-16 15:41:43.617","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283772636397568"} +{"level":"ERROR","ts":"2025-08-16 15:41:43.696","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283772967747584"} +{"level":"ERROR","ts":"2025-08-16 15:41:43.834","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283773542367232"} +{"level":"ERROR","ts":"2025-08-16 15:41:43.917","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283773890494464"} +{"level":"ERROR","ts":"2025-08-16 15:41:44.038","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283774398005248"} +{"level":"ERROR","ts":"2025-08-16 15:41:44.112","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283774699995136"} +{"level":"ERROR","ts":"2025-08-16 15:41:44.168","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283774943264768"} +{"level":"ERROR","ts":"2025-08-16 15:41:44.242","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283775249448960"} +{"level":"ERROR","ts":"2025-08-16 15:41:44.338","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283775656296448"} +{"level":"ERROR","ts":"2025-08-16 15:41:44.423","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283776017006592"} +{"level":"ERROR","ts":"2025-08-16 15:41:44.507","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283776365133824"} +{"level":"ERROR","ts":"2025-08-16 15:41:44.600","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283776759398400"} +{"level":"ERROR","ts":"2025-08-16 15:41:44.681","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283777065582592"} +{"level":"ERROR","ts":"2025-08-16 15:41:44.763","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283777443069952"} +{"level":"ERROR","ts":"2025-08-16 15:41:44.840","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283777761837056"} +{"level":"ERROR","ts":"2025-08-16 15:41:44.914","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283778072215552"} +{"level":"ERROR","ts":"2025-08-16 15:41:45.007","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283778466480128"} +{"level":"ERROR","ts":"2025-08-16 15:41:45.087","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283778802024448"} +{"level":"ERROR","ts":"2025-08-16 15:41:45.157","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283779095625728"} +{"level":"ERROR","ts":"2025-08-16 15:41:45.241","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283779443752960"} +{"level":"ERROR","ts":"2025-08-16 15:41:45.324","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283779796074496"} +{"level":"ERROR","ts":"2025-08-16 15:41:45.407","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283780144201728"} +{"level":"ERROR","ts":"2025-08-16 15:41:45.495","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283780504911872"} +{"level":"ERROR","ts":"2025-08-16 15:41:45.574","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283780840456192"} +{"level":"ERROR","ts":"2025-08-16 15:41:45.657","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283781192777728"} +{"level":"ERROR","ts":"2025-08-16 15:41:45.715","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283781427658752"} +{"level":"ERROR","ts":"2025-08-16 15:41:45.785","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283781729648640"} +{"level":"ERROR","ts":"2025-08-16 15:41:45.866","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283782065192960"} +{"level":"ERROR","ts":"2025-08-16 15:41:45.946","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283782404931584"} +{"level":"ERROR","ts":"2025-08-16 15:41:46.032","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283782765641728"} +{"level":"ERROR","ts":"2025-08-16 15:41:46.100","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283783042465792"} +{"level":"ERROR","ts":"2025-08-16 15:41:46.139","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283783214432256"} +{"level":"ERROR","ts":"2025-08-16 15:41:46.233","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283783608696832"} +{"level":"ERROR","ts":"2025-08-16 15:41:46.306","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283783910686720"} +{"level":"ERROR","ts":"2025-08-16 15:41:46.349","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283784091041792"} +{"level":"ERROR","ts":"2025-08-16 15:41:46.409","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283784346894336"} +{"level":"ERROR","ts":"2025-08-16 15:41:46.521","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283784816656384"} +{"level":"ERROR","ts":"2025-08-16 15:41:46.602","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283785156395008"} +{"level":"ERROR","ts":"2025-08-16 15:41:46.687","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283785508716544"} +{"level":"ERROR","ts":"2025-08-16 15:41:46.796","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283785852649472"} +{"level":"ERROR","ts":"2025-08-16 15:41:46.872","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283786288857088"} +{"level":"ERROR","ts":"2025-08-16 15:41:46.956","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283786641178624"} +{"level":"ERROR","ts":"2025-08-16 15:41:47.054","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283787048026112"} +{"level":"ERROR","ts":"2025-08-16 15:41:47.119","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283787324850176"} +{"level":"ERROR","ts":"2025-08-16 15:41:47.196","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283787635228672"} +{"level":"ERROR","ts":"2025-08-16 15:41:47.263","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283787928829952"} +{"level":"ERROR","ts":"2025-08-16 15:41:47.320","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283788167905280"} +{"level":"ERROR","ts":"2025-08-16 15:41:47.414","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283788553781248"} +{"level":"ERROR","ts":"2025-08-16 15:41:47.487","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283788864159744"} +{"level":"ERROR","ts":"2025-08-16 15:41:47.565","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283789187121152"} +{"level":"ERROR","ts":"2025-08-16 15:41:47.624","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283789442973696"} +{"level":"ERROR","ts":"2025-08-16 15:41:47.670","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283789635911680"} +{"level":"ERROR","ts":"2025-08-16 15:41:47.747","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283789958873088"} +{"level":"ERROR","ts":"2025-08-16 15:41:47.814","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283790239891456"} +{"level":"ERROR","ts":"2025-08-16 15:41:47.891","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283790558658560"} +{"level":"ERROR","ts":"2025-08-16 15:41:47.933","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283790739013632"} +{"level":"ERROR","ts":"2025-08-16 15:41:48.007","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283791049392128"} +{"level":"ERROR","ts":"2025-08-16 15:41:48.089","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283791393325056"} +{"level":"ERROR","ts":"2025-08-16 15:41:48.159","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283791686926336"} +{"level":"ERROR","ts":"2025-08-16 15:41:48.203","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283791867281408"} +{"level":"ERROR","ts":"2025-08-16 15:41:48.263","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283792123133952"} +{"level":"ERROR","ts":"2025-08-16 15:41:48.351","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283792492232704"} +{"level":"ERROR","ts":"2025-08-16 15:41:48.423","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283792794222592"} +{"level":"ERROR","ts":"2025-08-16 15:41:48.499","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283793108795392"} +{"level":"ERROR","ts":"2025-08-16 15:41:48.560","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283793364647936"} +{"level":"ERROR","ts":"2025-08-16 15:41:48.631","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283793658249216"} +{"level":"ERROR","ts":"2025-08-16 15:41:48.685","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283793893130240"} +{"level":"ERROR","ts":"2025-08-16 15:41:49.057","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283795168198656"} +{"level":"ERROR","ts":"2025-08-16 15:41:49.140","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283795797344256"} +{"level":"ERROR","ts":"2025-08-16 15:41:49.199","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283796044808192"} +{"level":"ERROR","ts":"2025-08-16 15:41:49.288","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283796422295552"} +{"level":"ERROR","ts":"2025-08-16 15:41:49.346","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283796665565184"} +{"level":"ERROR","ts":"2025-08-16 15:41:49.426","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283797001109504"} +{"level":"ERROR","ts":"2025-08-16 15:41:49.505","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283797319876608"} +{"level":"ERROR","ts":"2025-08-16 15:41:49.568","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283797596700672"} +{"level":"ERROR","ts":"2025-08-16 15:41:49.643","caller":"handle/test.go:12","msg":"测试错误","trackId":"347283797907079168"} +{"level":"ERROR","ts":"2025-08-16 16:02:30.169","caller":"middleware/error.go:56","msg":"系统异常","trackID":"347289000899248128","method":"GET","path":"/test","location":"base-farmework/internal/app/handle/test.go:20","stack":"goroutine 5 [running]:\nruntime/debug.Stack()\n\tD:/devtool/golang/go1.25.0/src/runtime/debug/stack.go:26 +0x5e\nbase-framework/pkg/utils/error.WrapWithStack({0x7ff7a3447b80, 0xc000208240})\n\tD:/workspace/code/go-project/base-farmework/pkg/utils/error/error.go:40 +0x6d\nbase-framework/pkg/router.(*Context).AddError(0xc00023a120, {0x7ff7a3447b80, 0xc000208240})\n\tD:/workspace/code/go-project/base-farmework/pkg/router/context.go:145 +0x10d\nbase-framework/internal/app/handle.Test(0xc00023a120)\n\tD:/workspace/code/go-project/base-farmework/internal/app/handle/test.go:20 +0xdd\nbase-framework/pkg/router.(*Context).Next(0xc00023a120)\n\tD:/workspace/code/go-project/base-farmework/pkg/router/context.go:61 +0x26\nbase-framework/internal/app.InitAppRouter.Logger.func3(0xc00023a120)\n\tD:/workspace/code/go-project/base-farmework/pkg/middleware/logger.go:14 +0x47\nbase-framework/pkg/router.(*Context).Next(0xc00023a120)\n\tD:/workspace/code/go-project/base-farmework/pkg/router/context.go:61 +0x26\nbase-framework/internal/app.InitAppRouter.Auth.func2(0xc00023a120)\n\tD:/workspace/code/go-project/base-farmework/pkg/middleware/auth.go:78 +0x377\nbase-framework/pkg/router.(*Context).Next(0xc00023a120)\n\tD:/workspace/code/go-project/base-farmework/pkg/router/context.go:61 +0x26\nbase-framework/pkg/middleware.Error.func1(0xc00023a120)\n\tD:/workspace/code/go-project/base-farmework/pkg/middleware/error.go:30 +0x2a\nbase-framework/pkg/router.(*Context).Next(0xc00023a120)\n\tD:/workspace/code/go-project/base-farmework/pkg/router/context.go:61 +0x26\nbase-framework/internal/app.InitAppRouter.Routinex.func1(0x7ff7a3380760?)\n\tD:/workspace/code/go-project/base-farmework/pkg/middleware/routinex.go:11 +0x30\nbase-framework/pkg/router.(*Context).Next(0xc00023a120)\n\tD:/workspace/code/go-project/base-farmework/pkg/router/context.go:61 +0x26\nbase-framework/pkg/router.(*Router).ServeHTTP(0xc00021e150, {0x7ff7a344a740, 0xc0002260f0}, 0xc000240000)\n\tD:/workspace/code/go-project/base-farmework/pkg/router/router.go:218 +0x399\nnet/http.serverHandler.ServeHTTP({0xc0002161c0?}, {0x7ff7a344a740?, 0xc0002260f0?}, 0x1?)\n\tD:/devtool/golang/go1.25.0/src/net/http/server.go:3340 +0x8e\nnet/http.(*conn).serve(0xc00006a120, {0x7ff7a344af30, 0xc00021e450})\n\tD:/devtool/golang/go1.25.0/src/net/http/server.go:2109 +0x665\ncreated by net/http.(*Server).Serve in goroutine 1\n\tD:/devtool/golang/go1.25.0/src/net/http/server.go:3493 +0x485\n","trackId":"347289000899248128"} diff --git a/code/go-project/base-farmework/logs/info-2025-08-15.log b/code/go-project/base-farmework/logs/info-2025-08-15.log deleted file mode 100644 index fcee9292..00000000 --- a/code/go-project/base-farmework/logs/info-2025-08-15.log +++ /dev/null @@ -1,112 +0,0 @@ -{"level":"INFO","ts":"2025-08-15 14:58:22","caller":"app/main.go:26","msg":"项目启动成功...","id":346910475188961280} -{"level":"INFO","ts":"2025-08-15 14:58:22","caller":"app/main.go:27","msg":"项目启动成功2..."} -2025-08-15 15:01:57 INFO app/main.go:26 项目启动成功... {"id": 346911374758117376} -2025-08-15 15:01:57 INFO app/main.go:27 项目启动成功2... -INFO app/main.go:26 项目启动成功... {"id": 346914331130068992} -INFO app/main.go:27 项目启动成功2... -2025-08-15 15:21:51.058 INFO app/main.go:26 项目启动成功... {"id": 346916382815813632} -2025-08-15 15:21:51.058 INFO app/main.go:27 项目启动成功2... -INFO app/main.go:26 项目启动成功... {"id": 346917491865288704} -INFO app/main.go:27 项目启动成功2... -INFO app/main.go:26 项目启动成功... {"id": 346917578448306176} -INFO app/main.go:27 项目启动成功2... -INFO app/main.go:26 项目启动成功... {"id": 346917609146417152} -INFO app/main.go:27 项目启动成功2... -2025-08-15 15:26:50 INFO app/main.go:26 项目启动成功... {"id": 346917637277614080} -2025-08-15 15:26:50 INFO app/main.go:27 项目启动成功2... -2025-08-15 15:27:34 INFO app/main.go:26 项目启动成功... {"id": 346917823945113600} -2025-08-15 15:27:34 INFO app/main.go:27 项目启动成功2... -2025-08-15 15:31:13.135 INFO app/main.go:26 项目启动成功... {"id": 346918740337623040} -2025-08-15 15:31:13.135 INFO app/main.go:27 项目启动成功2... -2025-08-15 15:34:43.373 INFO 15832 --- app/main.go:26 项目启动成功... {"id": 346919622139707392} -2025-08-15 15:34:43.374 INFO 15832 --- app/main.go:27 项目启动成功2... -2025-08-15 15:35:09.214 INFO 3820 --- app/main.go:26 项目启动成功... {"id": 346919730524717056} -2025-08-15 15:35:09.214 INFO 3820 --- app/main.go:27 项目启动成功2... -2025-08-15 15:44:29.342 INFO 5068 --- app/main.go:26 : 项目启动成功... {"id": 346922079871827968} -2025-08-15 15:44:29.342 INFO 5068 --- app/main.go:27 : 项目启动成功2... -2025-08-15 15:50:13.811 INFO 10980 --- app/main.go:26 : 项目启动成功... {"id": 346923524679532544} -2025-08-15 15:50:13.811 INFO 10980 --- app/main.go:27 : 项目启动成功2... -2025-08-15 15:50:21.046 INFO 14588 --- app/main.go:26 : 项目启动成功... {"id": 346923555025321984} -2025-08-15 15:50:21.047 INFO 14588 --- app/main.go:27 : 项目启动成功2... -2025-08-15 15:50:44.946 INFO 4664 --- app/main.go:26 : 项目启动成功... {"id": 346923655269187584} -2025-08-15 15:50:44.946 INFO 4664 --- app/main.go:27 : 项目启动成功2... -2025-08-15 15:50:53.440 INFO 16332 --- app/main.go:26 : 项目启动成功... {"id": 346923690895605760} -2025-08-15 15:50:53.440 INFO 16332 --- app/main.go:27 : 项目启动成功2... -2025-08-15 16:00:58.286 INFO 5928 --- app/main.go:26 : 项目启动成功... {"id": 346926227803602944} -2025-08-15 16:00:58.286 INFO 5928 --- app/main.go:27 : 项目启动成功2... -2025-08-15 16:04:36.925 INFO 1616 --- app/main.go:26: 项目启动成功... {"id": 346927144842035200} -2025-08-15 16:04:36.926 INFO 1616 --- app/main.go:27: 项目启动成功2... -2025-08-15 16:15:11.023 INFO 3956 --- app/main.go:26: 项目启动成功... {"id": 346929804441812992} -2025-08-15 16:15:11.023 INFO 3956 --- app/main.go:27: 项目启动成功2... -{"level":"INFO","ts":"2025-08-15 16:15:30.845","caller":"app/main.go:26","msg":"项目启动成功...","id":346929887581306880} -{"level":"INFO","ts":"2025-08-15 16:15:30.845","caller":"app/main.go:27","msg":"项目启动成功2..."} -{"level":"INFO","ts":"2025-08-15 17:16:36.735","caller":"app/main.go:26","msg":"项目启动成功...","id":346945263438397440} -{"level":"INFO","ts":"2025-08-15 17:16:36.735","caller":"app/main.go:27","msg":"项目启动成功2..."} -{"level":"INFO","ts":"2025-08-15 17:22:15.508","caller":"app/main.go:26","msg":"项目启动成功...","id":346946684351152128} -{"level":"INFO","ts":"2025-08-15 17:22:15.508","caller":"app/main.go:27","msg":"项目启动成功2..."} -{"level":"INFO","ts":"2025-08-15 17:22:27.021","caller":"app/main.go:26","msg":"项目启动成功...","id":346946732644368384} -{"level":"INFO","ts":"2025-08-15 17:22:27.021","caller":"app/main.go:27","msg":"项目启动成功2..."} -{"level":"INFO","ts":"2025-08-15 17:22:46.606","caller":"app/main.go:26","msg":"项目启动成功...","id":346946814789812224} -{"level":"INFO","ts":"2025-08-15 17:22:46.606","caller":"app/main.go:27","msg":"项目启动成功2..."} -{"level":"INFO","ts":"2025-08-15 17:22:54.953","caller":"app/main.go:26","msg":"项目启动成功...","id":346946849799667712} -{"level":"INFO","ts":"2025-08-15 17:22:54.954","caller":"app/main.go:27","msg":"项目启动成功2..."} -{"level":"INFO","ts":"2025-08-15 17:24:12.726","caller":"app/main.go:26","msg":"项目启动成功...","id":346947176003272704} -{"level":"INFO","ts":"2025-08-15 17:24:12.726","caller":"app/main.go:27","msg":"项目启动成功2..."} -{"level":"INFO","ts":"2025-08-15 17:24:34.956","caller":"app/main.go:26","msg":"项目启动成功...","id":346947269242650624} -{"level":"INFO","ts":"2025-08-15 17:24:34.956","caller":"app/main.go:27","msg":"项目启动成功2..."} -2025-08-15 17:24:58.277 INFO 14832 app/main.go:26 项目启动成功... {"id": 346947367058014208} -2025-08-15 17:24:58.277 INFO 14832 app/main.go:27 项目启动成功2... -2025-08-15 17:26:22.912 INFO 6312 --- app/main.go:26 项目启动成功... {"id": 346947722042933248} -2025-08-15 17:26:22.912 INFO 6312 --- app/main.go:27 项目启动成功2... -2025-08-15 17:26:33.441 INFO 1184 --- app/main.go:26 项目启动成功... {"id": 346947766204760064} -2025-08-15 17:26:33.441 INFO 1184 --- app/main.go:27 项目启动成功2... -2025-08-15 17:26:41.368 INFO 7592 --- app/main.go:26 项目启动成功... {"id": 346947799453007872} -2025-08-15 17:26:41.369 INFO 7592 --- app/main.go:27 项目启动成功2... -2025-08-15 17:26:57.052 INFO 15240 --- app/main.go:26 项目启动成功... {"id": 346947865236471808} -2025-08-15 17:26:57.052 INFO 15240 --- app/main.go:27 项目启动成功2... -2025-08-15 17:29:02.042 INFO 14256 --- app/main.go:26 项目启动成功... {"id": 346948389482528768} -2025-08-15 17:29:02.042 INFO 14256 --- app/main.go:27 项目启动成功2... -2025-08-15 17:29:14.451 INFO 15400 --- app/main.go:26 项目启动成功... {"id": 346948441529647104} -2025-08-15 17:29:14.451 INFO 15400 --- app/main.go:27 项目启动成功2... -2025-08-15 17:29:25.539 INFO 16328 --- app/main.go:26 项目启动成功... {"id": 346948488036089856} -2025-08-15 17:29:25.539 INFO 16328 --- app/main.go:27 项目启动成功2... -2025-08-15 17:29:54.047 INFO 4840 --- app/main.go:26 项目启动成功... {"id": 346948607607308288} -2025-08-15 17:29:54.048 INFO 4840 --- app/main.go:27 项目启动成功2... -2025-08-15 17:30:34.451 INFO 6412 --- app/main.go:26 项目启动成功... {"id": 346948777073967104} -2025-08-15 17:30:34.451 INFO 6412 --- app/main.go:27 项目启动成功2... -2025-08-15 17:30:45.526 INFO 216 --- app/main.go:26 项目启动成功... {"id": 346948823525883904} -2025-08-15 17:30:45.526 INFO 216 --- app/main.go:27 项目启动成功2... -2025-08-15 17:30:58.865 INFO 14788 --- app/main.go:26 项目启动成功... {"id": 346948879473704960} -2025-08-15 17:30:58.865 INFO 14788 --- app/main.go:27 项目启动成功2... -2025-08-15 20:20:43.212 INFO 36240 --- app/main.go:26 项目启动成功... {"id": 346991595721064448} -2025-08-15 20:20:43.212 INFO 36240 --- app/main.go:27 项目启动成功2... -2025-08-15 20:22:59.824 INFO 20504 --- app/main.go:26 项目启动成功... {"id": 346992168713322496} -2025-08-15 20:22:59.824 INFO 20504 --- app/main.go:27 项目启动成功2... -2025-08-15 20:23:20.618 INFO 26140 --- app/main.go:26 项目启动成功... {"id": 346992255929679872} -2025-08-15 20:23:20.618 INFO 26140 --- app/main.go:27 项目启动成功2... -2025-08-15 20:23:40 INFO 10016 --- app/main.go:26 项目启动成功... {"id": 346992341233434624} -2025-08-15 20:23:40 INFO 10016 --- app/main.go:27 项目启动成功2... -2025-08-15 20:27:44.044 INFO 29060 --- app/main.go:26: 项目启动成功... {"id": 346993360818405376} -2025-08-15 20:27:44.044 INFO 29060 --- app/main.go:27: 项目启动成功2... -2025-08-15 20:30:58.422 INFO ...- app/main.go:26: 项目启动成功... {"id": 346994176098828288} -2025-08-15 20:30:58.422 INFO ...- app/main.go:27: 项目启动成功2... -2025-08-15 20:31:14.222 INFO 15492 --- app/main.go:26: 项目启动成功... {"id": 346994242368831488} -2025-08-15 20:31:14.222 INFO 15492 --- app/main.go:27: 项目启动成功2... -2025-08-15 20:31:31.003 INFO 34092 --- app/main.go:26 项目启动成功... {"id": 346994312753446912} -2025-08-15 20:31:31.003 INFO 34092 --- app/main.go:27 项目启动成功2... -2025-08-15 20:31:48.042 INFO 24436 --- app/main.go:26 项目启动成功... {"id": 346994384220192768} -2025-08-15 20:31:48.042 INFO 24436 --- app/main.go:27 项目启动成功2... -2025-08-15 20:32:05.156 INFO 36992---app/main.go:26 项目启动成功... {"id": 346994456001511424} -2025-08-15 20:32:05.156 INFO 36992---app/main.go:27 项目启动成功2... -2025-08-15 20:32:13.911 INFO 860 - app/main.go:26 项目启动成功... {"id": 346994492722642944} -2025-08-15 20:32:13.911 INFO 860 - app/main.go:27 项目启动成功2... -2025-08-15 20:32:32.059 INFO [16248] - app/main.go:26 项目启动成功... {"id": 346994568840871936} -2025-08-15 20:32:32.059 INFO [16248] - app/main.go:27 项目启动成功2... -2025-08-15 20:32:41.937 INFO [12140] app/main.go:26 项目启动成功... {"id": 346994610272206848} -2025-08-15 20:32:41.937 INFO [12140] app/main.go:27 项目启动成功2... -2025-08-15 22:25:29.408 INFO [23208] app/main.go:26 项目启动成功... {"id": 347022995102892032} -2025-08-15 22:25:29.409 INFO [23208] app/main.go:27 项目启动成功2... {"log_id": 347022995107086336} -2025-08-15 22:25:47.684 INFO [23380] app/main.go:26 项目启动成功... {"id": 347023071757991936, "log_id": 347023071757991937} -2025-08-15 22:25:47.684 INFO [23380] app/main.go:27 项目启动成功2... {"log_id": 347023071757991939} -{"level":"INFO","ts":"2025-08-15 22:26:12.846","caller":"app/main.go:26","msg":"项目启动成功...","id":347023177295069184,"log_id":347023177295069185} -{"level":"INFO","ts":"2025-08-15 22:26:12.846","caller":"app/main.go:27","msg":"项目启动成功2...","log_id":347023177295069187} diff --git a/code/go-project/base-farmework/logs/info-2025-08-16.log b/code/go-project/base-farmework/logs/info-2025-08-16.log new file mode 100644 index 00000000..d0481b10 --- /dev/null +++ b/code/go-project/base-farmework/logs/info-2025-08-16.log @@ -0,0 +1,200 @@ +{"level":"INFO","ts":"2025-08-16 15:41:41.924","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283765535440896"} +{"level":"INFO","ts":"2025-08-16 15:41:41.925","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283765535440896"} +{"level":"INFO","ts":"2025-08-16 15:41:41.971","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283765732573184"} +{"level":"INFO","ts":"2025-08-16 15:41:41.971","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283765732573184"} +{"level":"INFO","ts":"2025-08-16 15:41:42.049","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283766059728896"} +{"level":"INFO","ts":"2025-08-16 15:41:42.049","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283766059728896"} +{"level":"INFO","ts":"2025-08-16 15:41:42.111","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283766319775744"} +{"level":"INFO","ts":"2025-08-16 15:41:42.111","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283766319775744"} +{"level":"INFO","ts":"2025-08-16 15:41:42.181","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283766613377024"} +{"level":"INFO","ts":"2025-08-16 15:41:42.181","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283766613377024"} +{"level":"INFO","ts":"2025-08-16 15:41:42.244","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283766877618176"} +{"level":"INFO","ts":"2025-08-16 15:41:42.244","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283766877618176"} +{"level":"INFO","ts":"2025-08-16 15:41:42.305","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283767133470720"} +{"level":"INFO","ts":"2025-08-16 15:41:42.305","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283767133470720"} +{"level":"INFO","ts":"2025-08-16 15:41:42.372","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283767414489088"} +{"level":"INFO","ts":"2025-08-16 15:41:42.372","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283767414489088"} +{"level":"INFO","ts":"2025-08-16 15:41:42.447","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283767729061888"} +{"level":"INFO","ts":"2025-08-16 15:41:42.450","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283767729061888"} +{"level":"INFO","ts":"2025-08-16 15:41:42.507","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283767980720128"} +{"level":"INFO","ts":"2025-08-16 15:41:42.507","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283767980720128"} +{"level":"INFO","ts":"2025-08-16 15:41:42.564","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283768219795456"} +{"level":"INFO","ts":"2025-08-16 15:41:42.564","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283768219795456"} +{"level":"INFO","ts":"2025-08-16 15:41:42.624","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283768471453696"} +{"level":"INFO","ts":"2025-08-16 15:41:42.624","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283768471453696"} +{"level":"INFO","ts":"2025-08-16 15:41:42.714","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283768848941056"} +{"level":"INFO","ts":"2025-08-16 15:41:42.714","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283768848941056"} +{"level":"INFO","ts":"2025-08-16 15:41:42.757","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283769029296128"} +{"level":"INFO","ts":"2025-08-16 15:41:42.757","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283769029296128"} +{"level":"INFO","ts":"2025-08-16 15:41:42.785","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283769146736640"} +{"level":"INFO","ts":"2025-08-16 15:41:42.785","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283769146736640"} +{"level":"INFO","ts":"2025-08-16 15:41:42.873","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283769515835392"} +{"level":"INFO","ts":"2025-08-16 15:41:42.873","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283769515835392"} +{"level":"INFO","ts":"2025-08-16 15:41:42.957","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283769868156928"} +{"level":"INFO","ts":"2025-08-16 15:41:42.957","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283769868156928"} +{"level":"INFO","ts":"2025-08-16 15:41:43.032","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283770178535424"} +{"level":"INFO","ts":"2025-08-16 15:41:43.032","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283770178535424"} +{"level":"INFO","ts":"2025-08-16 15:41:43.092","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283770434387968"} +{"level":"INFO","ts":"2025-08-16 15:41:43.092","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283770434387968"} +{"level":"INFO","ts":"2025-08-16 15:41:43.292","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283771273248768"} +{"level":"INFO","ts":"2025-08-16 15:41:43.292","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283771273248768"} +{"level":"INFO","ts":"2025-08-16 15:41:43.341","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283771478769664"} +{"level":"INFO","ts":"2025-08-16 15:41:43.342","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283771478769664"} +{"level":"INFO","ts":"2025-08-16 15:41:43.405","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283771747205120"} +{"level":"INFO","ts":"2025-08-16 15:41:43.405","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283771747205120"} +{"level":"INFO","ts":"2025-08-16 15:41:43.487","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283772091138048"} +{"level":"INFO","ts":"2025-08-16 15:41:43.487","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283772091138048"} +{"level":"INFO","ts":"2025-08-16 15:41:43.539","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283772309241856"} +{"level":"INFO","ts":"2025-08-16 15:41:43.539","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283772309241856"} +{"level":"INFO","ts":"2025-08-16 15:41:43.617","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283772636397568"} +{"level":"INFO","ts":"2025-08-16 15:41:43.617","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283772636397568"} +{"level":"INFO","ts":"2025-08-16 15:41:43.696","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283772967747584"} +{"level":"INFO","ts":"2025-08-16 15:41:43.696","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283772967747584"} +{"level":"INFO","ts":"2025-08-16 15:41:43.833","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283773542367232"} +{"level":"INFO","ts":"2025-08-16 15:41:43.833","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283773542367232"} +{"level":"INFO","ts":"2025-08-16 15:41:43.916","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283773890494464"} +{"level":"INFO","ts":"2025-08-16 15:41:43.916","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283773890494464"} +{"level":"INFO","ts":"2025-08-16 15:41:44.037","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283774398005248"} +{"level":"INFO","ts":"2025-08-16 15:41:44.038","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283774398005248"} +{"level":"INFO","ts":"2025-08-16 15:41:44.109","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283774699995136"} +{"level":"INFO","ts":"2025-08-16 15:41:44.109","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283774699995136"} +{"level":"INFO","ts":"2025-08-16 15:41:44.167","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283774943264768"} +{"level":"INFO","ts":"2025-08-16 15:41:44.168","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283774943264768"} +{"level":"INFO","ts":"2025-08-16 15:41:44.240","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283775249448960"} +{"level":"INFO","ts":"2025-08-16 15:41:44.241","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283775249448960"} +{"level":"INFO","ts":"2025-08-16 15:41:44.337","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283775656296448"} +{"level":"INFO","ts":"2025-08-16 15:41:44.338","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283775656296448"} +{"level":"INFO","ts":"2025-08-16 15:41:44.423","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283776017006592"} +{"level":"INFO","ts":"2025-08-16 15:41:44.423","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283776017006592"} +{"level":"INFO","ts":"2025-08-16 15:41:44.506","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283776365133824"} +{"level":"INFO","ts":"2025-08-16 15:41:44.506","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283776365133824"} +{"level":"INFO","ts":"2025-08-16 15:41:44.600","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283776759398400"} +{"level":"INFO","ts":"2025-08-16 15:41:44.600","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283776759398400"} +{"level":"INFO","ts":"2025-08-16 15:41:44.673","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283777065582592"} +{"level":"INFO","ts":"2025-08-16 15:41:44.673","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283777065582592"} +{"level":"INFO","ts":"2025-08-16 15:41:44.763","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283777443069952"} +{"level":"INFO","ts":"2025-08-16 15:41:44.763","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283777443069952"} +{"level":"INFO","ts":"2025-08-16 15:41:44.839","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283777761837056"} +{"level":"INFO","ts":"2025-08-16 15:41:44.839","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283777761837056"} +{"level":"INFO","ts":"2025-08-16 15:41:44.913","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283778072215552"} +{"level":"INFO","ts":"2025-08-16 15:41:44.914","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283778072215552"} +{"level":"INFO","ts":"2025-08-16 15:41:45.007","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283778466480128"} +{"level":"INFO","ts":"2025-08-16 15:41:45.007","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283778466480128"} +{"level":"INFO","ts":"2025-08-16 15:41:45.087","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283778802024448"} +{"level":"INFO","ts":"2025-08-16 15:41:45.087","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283778802024448"} +{"level":"INFO","ts":"2025-08-16 15:41:45.157","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283779095625728"} +{"level":"INFO","ts":"2025-08-16 15:41:45.157","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283779095625728"} +{"level":"INFO","ts":"2025-08-16 15:41:45.240","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283779443752960"} +{"level":"INFO","ts":"2025-08-16 15:41:45.240","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283779443752960"} +{"level":"INFO","ts":"2025-08-16 15:41:45.324","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283779796074496"} +{"level":"INFO","ts":"2025-08-16 15:41:45.324","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283779796074496"} +{"level":"INFO","ts":"2025-08-16 15:41:45.407","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283780144201728"} +{"level":"INFO","ts":"2025-08-16 15:41:45.407","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283780144201728"} +{"level":"INFO","ts":"2025-08-16 15:41:45.493","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283780504911872"} +{"level":"INFO","ts":"2025-08-16 15:41:45.493","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283780504911872"} +{"level":"INFO","ts":"2025-08-16 15:41:45.573","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283780840456192"} +{"level":"INFO","ts":"2025-08-16 15:41:45.573","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283780840456192"} +{"level":"INFO","ts":"2025-08-16 15:41:45.657","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283781192777728"} +{"level":"INFO","ts":"2025-08-16 15:41:45.657","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283781192777728"} +{"level":"INFO","ts":"2025-08-16 15:41:45.714","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283781427658752"} +{"level":"INFO","ts":"2025-08-16 15:41:45.714","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283781427658752"} +{"level":"INFO","ts":"2025-08-16 15:41:45.785","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283781729648640"} +{"level":"INFO","ts":"2025-08-16 15:41:45.785","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283781729648640"} +{"level":"INFO","ts":"2025-08-16 15:41:45.865","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283782065192960"} +{"level":"INFO","ts":"2025-08-16 15:41:45.865","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283782065192960"} +{"level":"INFO","ts":"2025-08-16 15:41:45.946","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283782404931584"} +{"level":"INFO","ts":"2025-08-16 15:41:45.946","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283782404931584"} +{"level":"INFO","ts":"2025-08-16 15:41:46.032","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283782765641728"} +{"level":"INFO","ts":"2025-08-16 15:41:46.032","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283782765641728"} +{"level":"INFO","ts":"2025-08-16 15:41:46.098","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283783042465792"} +{"level":"INFO","ts":"2025-08-16 15:41:46.099","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283783042465792"} +{"level":"INFO","ts":"2025-08-16 15:41:46.139","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283783214432256"} +{"level":"INFO","ts":"2025-08-16 15:41:46.139","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283783214432256"} +{"level":"INFO","ts":"2025-08-16 15:41:46.233","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283783608696832"} +{"level":"INFO","ts":"2025-08-16 15:41:46.233","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283783608696832"} +{"level":"INFO","ts":"2025-08-16 15:41:46.305","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283783910686720"} +{"level":"INFO","ts":"2025-08-16 15:41:46.305","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283783910686720"} +{"level":"INFO","ts":"2025-08-16 15:41:46.348","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283784091041792"} +{"level":"INFO","ts":"2025-08-16 15:41:46.348","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283784091041792"} +{"level":"INFO","ts":"2025-08-16 15:41:46.409","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283784346894336"} +{"level":"INFO","ts":"2025-08-16 15:41:46.409","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283784346894336"} +{"level":"INFO","ts":"2025-08-16 15:41:46.521","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283784816656384"} +{"level":"INFO","ts":"2025-08-16 15:41:46.521","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283784816656384"} +{"level":"INFO","ts":"2025-08-16 15:41:46.602","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283785156395008"} +{"level":"INFO","ts":"2025-08-16 15:41:46.602","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283785156395008"} +{"level":"INFO","ts":"2025-08-16 15:41:46.686","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283785508716544"} +{"level":"INFO","ts":"2025-08-16 15:41:46.686","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283785508716544"} +{"level":"INFO","ts":"2025-08-16 15:41:46.793","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283785852649472"} +{"level":"INFO","ts":"2025-08-16 15:41:46.796","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283785852649472"} +{"level":"INFO","ts":"2025-08-16 15:41:46.872","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283786288857088"} +{"level":"INFO","ts":"2025-08-16 15:41:46.872","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283786288857088"} +{"level":"INFO","ts":"2025-08-16 15:41:46.956","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283786641178624"} +{"level":"INFO","ts":"2025-08-16 15:41:46.956","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283786641178624"} +{"level":"INFO","ts":"2025-08-16 15:41:47.053","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283787048026112"} +{"level":"INFO","ts":"2025-08-16 15:41:47.054","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283787048026112"} +{"level":"INFO","ts":"2025-08-16 15:41:47.119","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283787324850176"} +{"level":"INFO","ts":"2025-08-16 15:41:47.119","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283787324850176"} +{"level":"INFO","ts":"2025-08-16 15:41:47.193","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283787635228672"} +{"level":"INFO","ts":"2025-08-16 15:41:47.195","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283787635228672"} +{"level":"INFO","ts":"2025-08-16 15:41:47.263","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283787928829952"} +{"level":"INFO","ts":"2025-08-16 15:41:47.263","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283787928829952"} +{"level":"INFO","ts":"2025-08-16 15:41:47.320","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283788167905280"} +{"level":"INFO","ts":"2025-08-16 15:41:47.320","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283788167905280"} +{"level":"INFO","ts":"2025-08-16 15:41:47.412","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283788553781248"} +{"level":"INFO","ts":"2025-08-16 15:41:47.414","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283788553781248"} +{"level":"INFO","ts":"2025-08-16 15:41:47.486","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283788864159744"} +{"level":"INFO","ts":"2025-08-16 15:41:47.487","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283788864159744"} +{"level":"INFO","ts":"2025-08-16 15:41:47.563","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283789187121152"} +{"level":"INFO","ts":"2025-08-16 15:41:47.565","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283789187121152"} +{"level":"INFO","ts":"2025-08-16 15:41:47.624","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283789442973696"} +{"level":"INFO","ts":"2025-08-16 15:41:47.624","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283789442973696"} +{"level":"INFO","ts":"2025-08-16 15:41:47.670","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283789635911680"} +{"level":"INFO","ts":"2025-08-16 15:41:47.670","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283789635911680"} +{"level":"INFO","ts":"2025-08-16 15:41:47.747","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283789958873088"} +{"level":"INFO","ts":"2025-08-16 15:41:47.747","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283789958873088"} +{"level":"INFO","ts":"2025-08-16 15:41:47.814","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283790239891456"} +{"level":"INFO","ts":"2025-08-16 15:41:47.814","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283790239891456"} +{"level":"INFO","ts":"2025-08-16 15:41:47.890","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283790558658560"} +{"level":"INFO","ts":"2025-08-16 15:41:47.890","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283790558658560"} +{"level":"INFO","ts":"2025-08-16 15:41:47.933","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283790739013632"} +{"level":"INFO","ts":"2025-08-16 15:41:47.933","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283790739013632"} +{"level":"INFO","ts":"2025-08-16 15:41:48.007","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283791049392128"} +{"level":"INFO","ts":"2025-08-16 15:41:48.007","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283791049392128"} +{"level":"INFO","ts":"2025-08-16 15:41:48.089","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283791393325056"} +{"level":"INFO","ts":"2025-08-16 15:41:48.089","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283791393325056"} +{"level":"INFO","ts":"2025-08-16 15:41:48.159","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283791686926336"} +{"level":"INFO","ts":"2025-08-16 15:41:48.159","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283791686926336"} +{"level":"INFO","ts":"2025-08-16 15:41:48.202","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283791867281408"} +{"level":"INFO","ts":"2025-08-16 15:41:48.203","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283791867281408"} +{"level":"INFO","ts":"2025-08-16 15:41:48.263","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283792123133952"} +{"level":"INFO","ts":"2025-08-16 15:41:48.263","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283792123133952"} +{"level":"INFO","ts":"2025-08-16 15:41:48.351","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283792492232704"} +{"level":"INFO","ts":"2025-08-16 15:41:48.351","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283792492232704"} +{"level":"INFO","ts":"2025-08-16 15:41:48.423","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283792794222592"} +{"level":"INFO","ts":"2025-08-16 15:41:48.423","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283792794222592"} +{"level":"INFO","ts":"2025-08-16 15:41:48.498","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283793108795392"} +{"level":"INFO","ts":"2025-08-16 15:41:48.499","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283793108795392"} +{"level":"INFO","ts":"2025-08-16 15:41:48.559","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283793364647936"} +{"level":"INFO","ts":"2025-08-16 15:41:48.559","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283793364647936"} +{"level":"INFO","ts":"2025-08-16 15:41:48.629","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283793658249216"} +{"level":"INFO","ts":"2025-08-16 15:41:48.630","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283793658249216"} +{"level":"INFO","ts":"2025-08-16 15:41:48.685","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283793893130240"} +{"level":"INFO","ts":"2025-08-16 15:41:48.685","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283793893130240"} +{"level":"INFO","ts":"2025-08-16 15:41:48.989","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283795168198656"} +{"level":"INFO","ts":"2025-08-16 15:41:49.057","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283795168198656"} +{"level":"INFO","ts":"2025-08-16 15:41:49.139","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283795797344256"} +{"level":"INFO","ts":"2025-08-16 15:41:49.140","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283795797344256"} +{"level":"INFO","ts":"2025-08-16 15:41:49.199","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283796044808192"} +{"level":"INFO","ts":"2025-08-16 15:41:49.199","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283796044808192"} +{"level":"INFO","ts":"2025-08-16 15:41:49.288","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283796422295552"} +{"level":"INFO","ts":"2025-08-16 15:41:49.288","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283796422295552"} +{"level":"INFO","ts":"2025-08-16 15:41:49.346","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283796665565184"} +{"level":"INFO","ts":"2025-08-16 15:41:49.346","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283796665565184"} +{"level":"INFO","ts":"2025-08-16 15:41:49.426","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283797001109504"} +{"level":"INFO","ts":"2025-08-16 15:41:49.426","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283797001109504"} +{"level":"INFO","ts":"2025-08-16 15:41:49.502","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283797319876608"} +{"level":"INFO","ts":"2025-08-16 15:41:49.502","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283797319876608"} +{"level":"INFO","ts":"2025-08-16 15:41:49.568","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283797596700672"} +{"level":"INFO","ts":"2025-08-16 15:41:49.568","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283797596700672"} +{"level":"INFO","ts":"2025-08-16 15:41:49.642","caller":"handle/test.go:10","msg":"项目启动成功...","trackId":"347283797907079168"} +{"level":"INFO","ts":"2025-08-16 15:41:49.643","caller":"handle/test.go:11","msg":"项目启动成功2...","trackId":"347283797907079168"} diff --git a/code/go-project/base-farmework/logs/warn-2025-08-15.log b/code/go-project/base-farmework/logs/warn-2025-08-16.log similarity index 100% rename from code/go-project/base-farmework/logs/warn-2025-08-15.log rename to code/go-project/base-farmework/logs/warn-2025-08-16.log diff --git a/code/go-project/base-farmework/pkg/logx/field.go b/code/go-project/base-farmework/pkg/logx/field.go index 67d6995e..f4000214 100644 --- a/code/go-project/base-farmework/pkg/logx/field.go +++ b/code/go-project/base-farmework/pkg/logx/field.go @@ -6,7 +6,6 @@ import ( "go.uber.org/zap" ) -// String 类型字段 func String(key, val string) zap.Field { return zap.String(key, val) } func Stringp(key string, val *string) zap.Field { return zap.Stringp(key, val) } func Strings(key string, val []string) zap.Field { return zap.Strings(key, val) } diff --git a/code/go-project/base-farmework/pkg/logx/log.go b/code/go-project/base-farmework/pkg/logx/log.go index c93984c3..df72d9ab 100644 --- a/code/go-project/base-farmework/pkg/logx/log.go +++ b/code/go-project/base-farmework/pkg/logx/log.go @@ -1,6 +1,8 @@ package logx import ( + "base-framework/pkg/routinex" + "base-framework/pkg/utils/strutil" "base-framework/pkg/utils/uid" "fmt" "os" @@ -15,10 +17,9 @@ import ( "go.uber.org/zap/zapcore" ) -// ----------------- 全局变量 ----------------- var ( - Logger *zap.Logger - + Logger *zap.Logger + TrackID = "trackId" once sync.Once currentDate string mu sync.Mutex @@ -32,10 +33,8 @@ var ( errorCore zapcore.Core ) -const LogID = "log_id" const logTmFmtWithMS = "2006-01-02 15:04:05.000" -// 彩色日志级别 var levelColor = map[zapcore.Level]string{ zapcore.DebugLevel: "\033[36mDEBUG\033[0m", zapcore.InfoLevel: "\033[32mINFO\033[0m", @@ -47,7 +46,7 @@ var levelColor = map[zapcore.Level]string{ } // ----------------- trackCore ----------------- -// trackCore 包装 zapcore.Core,实现自动生成 track_id +// 在写入日志时自动从 routinex 获取 log_id 并加入字段 type trackCore struct { zapcore.Core } @@ -64,20 +63,27 @@ func (c *trackCore) Check(entry zapcore.Entry, ce *zapcore.CheckedEntry) *zapcor } func (c *trackCore) Write(entry zapcore.Entry, fields []zapcore.Field) error { - hasTrackID := false - for _, f := range fields { - if f.Key == LogID { - hasTrackID = true - break - } - } - if !hasTrackID { - fields = append(fields, Uint64(LogID, uid.NextID())) + val := routinex.Get(TrackID) + if val == nil { + val = uid.NextID() + routinex.Set(TrackID, val) // 保证同一请求复用同一 trackID } + + fields = append(fields, zap.String(TrackID, strutil.ToString(val))) return c.Core.Write(entry, fields) } -// ----------------- 默认日志配置 ----------------- +// InitLogger ----------------- 初始化日志 ----------------- +func InitLogger() { + once.Do(func() { + if config.Log == nil { + config.Log = defaultLogConfig() + } + createDirIfNotExist(config.Log.Dir) + switchDate(time.Now().Format("2006-01-02")) + }) +} + func defaultLogConfig() *types.Log { return &types.Log{ Dir: "logs", @@ -91,21 +97,10 @@ func defaultLogConfig() *types.Log { } } -// ----------------- 初始化 ----------------- -func InitLogger() { - once.Do(func() { - if config.Log == nil { - config.Log = defaultLogConfig() - } - createDirIfNotExist(config.Log.Dir) - switchDate(time.Now().Format("2006-01-02")) - }) -} - +// ----------------- 初始化核心 ----------------- func switchDate(today string) { currentDate = today - // 关闭旧文件 if infoFile != nil { _ = infoFile.Close() } @@ -116,7 +111,6 @@ func switchDate(today string) { _ = errorFile.Close() } - // 文件路径 infoPath, warnPath, errorPath := config.Log.Dir, config.Log.Dir, config.Log.Dir if config.Log.LevelDirs { infoPath = filepath.Join(config.Log.Dir, "info") @@ -129,12 +123,10 @@ func switchDate(today string) { createDirIfNotExist(config.Log.Dir) } - // 打开文件 infoFile = getOrCreateFile(filepath.Join(infoPath, fmt.Sprintf("info-%s.log", today))) warnFile = getOrCreateFile(filepath.Join(warnPath, fmt.Sprintf("warn-%s.log", today))) errorFile = getOrCreateFile(filepath.Join(errorPath, fmt.Sprintf("error-%s.log", today))) - // 文件编码器 var fileEncoder zapcore.Encoder if config.Log.Format == "console" { fileEncoder = newConsoleEncoder(false) @@ -142,32 +134,29 @@ func switchDate(today string) { fileEncoder = newJSONEncoder() } - // 文件核心 - infoCore = zapcore.NewCore(fileEncoder, zapcore.AddSync(infoFile), zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { + infoCore = &trackCore{zapcore.NewCore(fileEncoder, zapcore.AddSync(infoFile), zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { return lvl <= zapcore.InfoLevel - })) - warnCore = zapcore.NewCore(fileEncoder, zapcore.AddSync(warnFile), zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { + }))} + + warnCore = &trackCore{zapcore.NewCore(fileEncoder, zapcore.AddSync(warnFile), zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { return lvl == zapcore.WarnLevel - })) - errorCore = zapcore.NewCore(fileEncoder, zapcore.AddSync(errorFile), zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { + }))} + + errorCore = &trackCore{zapcore.NewCore(fileEncoder, zapcore.AddSync(errorFile), zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { return lvl >= zapcore.ErrorLevel - })) + }))} - cores := []zapcore.Core{ - &trackCore{infoCore}, - &trackCore{warnCore}, - &trackCore{errorCore}, - } + cores := []zapcore.Core{infoCore, warnCore, errorCore} - // 开启 console 输出 if config.Log.Console { - consoleCore := zapcore.NewCore(newConsoleEncoder(true), zapcore.AddSync(os.Stdout), zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { + consoleCore := &trackCore{zapcore.NewCore(newConsoleEncoder(true), zapcore.AddSync(os.Stdout), zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { return lvl >= zapcore.DebugLevel - })) - cores = append(cores, &trackCore{consoleCore}) + }))} + cores = append(cores, consoleCore) } Logger = zap.New(zapcore.NewTee(cores...)) + if config.Log.Caller { Logger = Logger.WithOptions(zap.AddCaller()) } else { @@ -182,7 +171,6 @@ func switchDate(today string) { })) } -// ----------------- 编码器 ----------------- func newConsoleEncoder(enableColor bool) zapcore.Encoder { cfg := zapcore.EncoderConfig{ TimeKey: "ts", @@ -206,7 +194,7 @@ func newConsoleEncoder(enableColor bool) zapcore.Encoder { }, EncodeCaller: func(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) { pid := os.Getpid() - enc.AppendString(fmt.Sprintf("[%d] %s", pid, caller.TrimmedPath())) + enc.AppendString(fmt.Sprintf("[%d] [%d] %s", pid, routinex.CurGID(), caller.TrimmedPath())) }, } return zapcore.NewConsoleEncoder(cfg) @@ -223,7 +211,6 @@ func newJSONEncoder() zapcore.Encoder { return zapcore.NewJSONEncoder(cfg) } -// ----------------- 工具函数 ----------------- func checkDateSwitch() { today := time.Now().Format("2006-01-02") if today != currentDate { diff --git a/code/go-project/base-farmework/pkg/middleware/auth.go b/code/go-project/base-farmework/pkg/middleware/auth.go index 10b1481d..5423febe 100644 --- a/code/go-project/base-farmework/pkg/middleware/auth.go +++ b/code/go-project/base-farmework/pkg/middleware/auth.go @@ -6,13 +6,11 @@ import ( "base-framework/pkg/router" "base-framework/pkg/utils/jwt" "errors" - "log" "strings" ) func Auth() router.HandlerFunc { return func(c *router.Context) { - log.Println("[Auth] 开始鉴权") tokenHeader := c.Header("Authorization") userIdHeader := c.Header("userId") diff --git a/code/go-project/base-farmework/pkg/middleware/error.go b/code/go-project/base-farmework/pkg/middleware/error.go index c9e5b4f4..0119f335 100644 --- a/code/go-project/base-farmework/pkg/middleware/error.go +++ b/code/go-project/base-farmework/pkg/middleware/error.go @@ -1,8 +1,11 @@ package middleware import ( + "base-framework/pkg/logx" "base-framework/pkg/reponse" "base-framework/pkg/router" + "base-framework/pkg/routinex" + "base-framework/pkg/utils/strutil" "os" "path/filepath" "runtime" @@ -34,15 +37,31 @@ func Error() router.HandlerFunc { lastErr := errs[len(errs)-1] stack := lastErr.StackTrace() location := extractBusinessLocation(stack) + trackId := routinex.Get(logx.TrackID) - info := reponse.ErrorInfo{ - Method: c.Request.Method, - Path: c.Request.URL.Path, - Message: lastErr.Error(), - Stack: stack, - Location: location, + var trackIDStr string + if trackId != nil { + trackIDStr = strutil.ToString(trackId) // 用你之前写的工具类 } + var info = reponse.ErrorInfo{ + Method: c.Request.Method, + Path: c.Request.URL.Path, + Message: lastErr.Error(), + //Stack: stack, + Location: location, + TrackId: trackIDStr, + } + + logx.Logger.Error( + "系统异常", + logx.String("trackID", trackIDStr), + logx.String("method", c.Request.Method), + logx.String("path", c.Request.URL.Path), + logx.String("location", location), + logx.String("stack", stack), + ) + reponse.Error(c).ErrorInfo(info).Send() c.Abort() } diff --git a/code/go-project/base-farmework/pkg/middleware/logger.go b/code/go-project/base-farmework/pkg/middleware/logger.go index 4e16fa1a..ac703de9 100644 --- a/code/go-project/base-farmework/pkg/middleware/logger.go +++ b/code/go-project/base-farmework/pkg/middleware/logger.go @@ -1,17 +1,16 @@ package middleware import ( + "base-framework/pkg/logx" "base-framework/pkg/router" - "time" + "base-framework/pkg/routinex" + "base-framework/pkg/utils/uid" ) func Logger() router.HandlerFunc { return func(c *router.Context) { - start := time.Now() - // 执行后续中间件和处理器 + routinex.Set(logx.TrackID, uid.NextID()) + c.Next() - elapsed := time.Since(start) - // 即使业务中断,这里也能执行,打印耗时 - println("耗时:", elapsed.String()) } } diff --git a/code/go-project/base-farmework/pkg/middleware/routinex.go b/code/go-project/base-farmework/pkg/middleware/routinex.go new file mode 100644 index 00000000..8c006b47 --- /dev/null +++ b/code/go-project/base-farmework/pkg/middleware/routinex.go @@ -0,0 +1,13 @@ +package middleware + +import ( + "base-framework/pkg/router" + "base-framework/pkg/routinex" +) + +func Routinex() router.HandlerFunc { + return func(c *router.Context) { + defer routinex.Clear() + c.Next() + } +} diff --git a/code/go-project/base-farmework/pkg/reponse/response.go b/code/go-project/base-farmework/pkg/reponse/response.go index 43aeb559..a61d5dce 100644 --- a/code/go-project/base-farmework/pkg/reponse/response.go +++ b/code/go-project/base-farmework/pkg/reponse/response.go @@ -6,12 +6,11 @@ import ( ) type ErrorInfo struct { - Id string `json:"id,omitempty"` + TrackId string `json:"trackId,omitempty"` Method string `json:"method,omitempty"` Path string `json:"path,omitempty"` Message string `json:"message,omitempty"` Location string `json:"location,omitempty"` - Stack string `json:"stack,omitempty"` } // Result 统一响应结构体 diff --git a/code/go-project/base-farmework/pkg/router/context.go b/code/go-project/base-farmework/pkg/router/context.go index 82073b39..b0972c40 100644 --- a/code/go-project/base-farmework/pkg/router/context.go +++ b/code/go-project/base-farmework/pkg/router/context.go @@ -1,7 +1,7 @@ package router import ( - "base-framework/pkg/utils" + error2 "base-framework/pkg/utils/error" "bytes" "encoding/json" "io" @@ -115,6 +115,7 @@ func (c *Context) Set(key string, value interface{}) { c.keys = make(map[string]interface{}) } c.keys[key] = value + } // Get 取值 @@ -137,21 +138,21 @@ func (c *Context) AddError(err error) { } if _, exists := c.keys["errors"]; !exists { - c.keys["errors"] = []*utils.StackError{} + c.keys["errors"] = []*error2.StackError{} } // 统一生成堆栈 - se := utils.WrapWithStack(err) - c.keys["errors"] = append(c.keys["errors"].([]*utils.StackError), se) + se := error2.WrapWithStack(err) + c.keys["errors"] = append(c.keys["errors"].([]*error2.StackError), se) } // Errors 返回 []*utils.StackError -func (c *Context) Errors() []*utils.StackError { +func (c *Context) Errors() []*error2.StackError { if c.keys == nil { return nil } if errs, exists := c.keys["errors"]; exists { - return errs.([]*utils.StackError) + return errs.([]*error2.StackError) } return nil } diff --git a/code/go-project/base-farmework/pkg/routinex/routinex.go b/code/go-project/base-farmework/pkg/routinex/routinex.go new file mode 100644 index 00000000..b687b03c --- /dev/null +++ b/code/go-project/base-farmework/pkg/routinex/routinex.go @@ -0,0 +1,72 @@ +package routinex + +import ( + "runtime" + "strconv" + "strings" + "sync" +) + +// ------------------- goroutine id ------------------- +func CurGID() uint64 { + var buf [64]byte + n := runtime.Stack(buf[:], false) + line := strings.Fields(strings.TrimPrefix(string(buf[:n]), "goroutine "))[0] + gid, _ := strconv.ParseUint(line, 10, 64) + return gid +} + +type RoutineLocal struct { + data sync.Map // gid -> map[key]any +} + +var ( + instance *RoutineLocal + instanceOnce sync.Once +) + +func GetInstance() *RoutineLocal { + instanceOnce.Do(func() { + instance = &RoutineLocal{} + }) + return instance +} + +// Set 存储单条数据 +func Set(key string, value any) { + gid := CurGID() + v, _ := GetInstance().data.LoadOrStore(gid, &sync.Map{}) + m := v.(*sync.Map) + m.Store(key, value) +} + +// Get 获取单条数据 +func Get(key string) any { + gid := CurGID() + if v, ok := GetInstance().data.Load(gid); ok { + m := v.(*sync.Map) + if val, ok := m.Load(key); ok { + return val + } + } + return nil +} + +// Clear 删除当前 goroutine 所有数据 +func Clear() { + GetInstance().data.Delete(CurGID()) +} + +// Go 封装函数,自动继承父 goroutine 数据 +func Go(f func()) { + parentGID := CurGID() + parentData, _ := GetInstance().data.Load(parentGID) + + go func() { + if parentData != nil { + GetInstance().data.Store(CurGID(), parentData) + defer Clear() + } + f() + }() +} diff --git a/code/go-project/base-farmework/pkg/utils/db/select.go b/code/go-project/base-farmework/pkg/utils/db/select.go index 1c05e5bf..51f6e42b 100644 --- a/code/go-project/base-farmework/pkg/utils/db/select.go +++ b/code/go-project/base-farmework/pkg/utils/db/select.go @@ -1,48 +1,62 @@ package db import ( + "database/sql" "fmt" ) -func (c *Client) QueryRows(query string, args ...any) ([]map[string]any, error) { +func (c *Client) QueryRows(query string) ([]map[string]interface{}, error) { if c.Conn == nil { return nil, fmt.Errorf("database connection is nil") } - rows, err := c.Conn.Query(query, args...) + rows, err := c.Conn.Query(query) if err != nil { - return nil, err // 不加 debug.Stack() + return nil, fmt.Errorf("query error: %v", err) } - defer rows.Close() + defer func(rows *sql.Rows) { + err := rows.Close() + if err != nil { + fmt.Println("关闭资源失败") + } + }(rows) - columns, err := rows.Columns() + // 获取列名 + cols, err := rows.Columns() if err != nil { return nil, err } - results := make([]map[string]any, 0) + var result []map[string]interface{} + for rows.Next() { - values := make([]any, len(columns)) - valuePtrs := make([]any, len(columns)) - for i := range columns { - valuePtrs[i] = &values[i] + // 创建扫描用的切片 + columnPointers := make([]interface{}, len(cols)) + columnValues := make([]interface{}, len(cols)) + for i := range columnPointers { + columnPointers[i] = &columnValues[i] } - if err := rows.Scan(valuePtrs...); err != nil { + if err := rows.Scan(columnPointers...); err != nil { return nil, err } - rowMap := make(map[string]any) - for i, col := range columns { - rowMap[col] = values[i] + rowMap := make(map[string]interface{}) + for i, colName := range cols { + val := columnValues[i] + if b, ok := val.([]byte); ok { + rowMap[colName] = string(b) + } else { + rowMap[colName] = val + } } - results = append(results, rowMap) + result = append(result, rowMap) } if err := rows.Err(); err != nil { return nil, err } - return results, nil + return result, nil } diff --git a/code/go-project/base-farmework/pkg/utils/error.go b/code/go-project/base-farmework/pkg/utils/error/error.go similarity index 85% rename from code/go-project/base-farmework/pkg/utils/error.go rename to code/go-project/base-farmework/pkg/utils/error/error.go index 5829b4d3..a9111a55 100644 --- a/code/go-project/base-farmework/pkg/utils/error.go +++ b/code/go-project/base-farmework/pkg/utils/error/error.go @@ -1,6 +1,9 @@ -package utils +package error -import "runtime/debug" +import ( + "errors" + "runtime/debug" +) // StackError 保存原始错误和堆栈 type StackError struct { @@ -27,7 +30,8 @@ func WrapWithStack(err error) *StackError { return nil } - if se, ok := err.(*StackError); ok { + var se *StackError + if errors.As(err, &se) { return se } diff --git a/code/go-project/base-farmework/pkg/utils/strutil/strutil.go b/code/go-project/base-farmework/pkg/utils/strutil/strutil.go new file mode 100644 index 00000000..e7acc302 --- /dev/null +++ b/code/go-project/base-farmework/pkg/utils/strutil/strutil.go @@ -0,0 +1,53 @@ +package strutil + +import ( + "fmt" + "strconv" +) + +// ToString 通用高效转换为 string +func ToString(v any) string { + switch n := v.(type) { + // 整数类型 + case int: + return strconv.FormatInt(int64(n), 10) + case int8: + return strconv.FormatInt(int64(n), 10) + case int16: + return strconv.FormatInt(int64(n), 10) + case int32: + return strconv.FormatInt(int64(n), 10) + case int64: + return strconv.FormatInt(n, 10) + + // 无符号整数 + case uint: + return strconv.FormatUint(uint64(n), 10) + case uint8: + return strconv.FormatUint(uint64(n), 10) + case uint16: + return strconv.FormatUint(uint64(n), 10) + case uint32: + return strconv.FormatUint(uint64(n), 10) + case uint64: + return strconv.FormatUint(n, 10) + + // 浮点数 + case float32: + return strconv.FormatFloat(float64(n), 'f', -1, 32) + case float64: + return strconv.FormatFloat(n, 'f', -1, 64) + + // 字符串 + case string: + return n + + // 布尔 + case bool: + return strconv.FormatBool(n) + + default: + // fallback + return fmt.Sprintf("%v", v) + } +} diff --git a/code/sllog/Sllog-User-Api/.idea/vcs.xml b/code/sllog/Sllog-User-Api/.idea/vcs.xml new file mode 100644 index 00000000..c2365ab1 --- /dev/null +++ b/code/sllog/Sllog-User-Api/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file