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