From 0e0affb00815f7b7da45aff1c92cd34793b58536 Mon Sep 17 00:00:00 2001 From: luorijun Date: Wed, 7 May 2025 19:03:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=BF=90=E8=A1=8C=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E9=85=8D=E7=BD=AE=EF=BC=8C=E4=BC=98=E5=8C=96=E8=B0=83?= =?UTF-8?q?=E8=AF=95=E5=92=8C=E7=94=9F=E4=BA=A7=E7=8E=AF=E5=A2=83=E7=9A=84?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/env/env.go | 11 +++++++++++ pkg/logs/logs.go | 34 ++++++++++++++++++++++++++-------- web/auth/auth.go | 5 +++++ web/services/session.go | 14 ++++++++++++++ web/web.go | 8 +++++--- 5 files changed, 61 insertions(+), 11 deletions(-) diff --git a/pkg/env/env.go b/pkg/env/env.go index 8365c66..b96b259 100644 --- a/pkg/env/env.go +++ b/pkg/env/env.go @@ -13,6 +13,7 @@ import ( var ( AppName = "platform" + RunMode = "debug" // debug, production ) func loadApp() { @@ -20,6 +21,16 @@ func loadApp() { if _AppName != "" { AppName = _AppName } + + _RunMode := os.Getenv("RUN_MODE") + switch _RunMode { + case "debug", "production": + RunMode = _RunMode + case "": + break + default: + panic("环境变量 RUN_MODE 的值只能是 debug 或 production") + } } // endregion diff --git a/pkg/logs/logs.go b/pkg/logs/logs.go index fbc2948..19ed09a 100644 --- a/pkg/logs/logs.go +++ b/pkg/logs/logs.go @@ -1,19 +1,24 @@ package logs import ( + "github.com/lmittmann/tint" "log/slog" "os" "platform/pkg/env" - "time" - - "github.com/lmittmann/tint" ) func Init() { - slog.SetDefault(slog.New( - tint.NewHandler(os.Stdout, &tint.Options{ + + var writer = os.Stdout + var timeFormat = "2006-01-02 15:04:05" + + var handler slog.Handler + switch env.RunMode { + case "debug": + handler = tint.NewHandler(writer, &tint.Options{ + AddSource: true, Level: env.LogLevel, - TimeFormat: time.Kitchen, + TimeFormat: timeFormat, ReplaceAttr: func(_ []string, attr slog.Attr) slog.Attr { err, ok := attr.Value.Any().(error) if ok { @@ -21,6 +26,19 @@ func Init() { } return attr }, - }), - )) + }) + case "production": + handler = slog.NewJSONHandler(writer, &slog.HandlerOptions{ + AddSource: false, + Level: env.LogLevel, + ReplaceAttr: func(_ []string, a slog.Attr) slog.Attr { + if a.Key == "time" { + return slog.String("time", a.Value.Time().Format(timeFormat)) + } + return a + }, + }) + } + + slog.SetDefault(slog.New(handler)) } diff --git a/web/auth/auth.go b/web/auth/auth.go index 0d4cd55..0fd674b 100644 --- a/web/auth/auth.go +++ b/web/auth/auth.go @@ -66,6 +66,11 @@ func Protect(c *fiber.Ctx, types []services.PayloadType, permissions []string) ( return nil, fiber.NewError(fiber.StatusForbidden, "没有权限") } + // 保存到上下文 + c.Locals("auth", auth) + c.Locals("authid", auth.Payload.Id) + c.Locals("authtype", auth.Payload.Type.Name()) + return auth, nil } diff --git a/web/services/session.go b/web/services/session.go index f66023e..f2ec7fb 100644 --- a/web/services/session.go +++ b/web/services/session.go @@ -237,6 +237,20 @@ const ( PayloadClientConfidential ) +func (t PayloadType) Name() string { + switch t { + case PayloadUser: + return "user" + case PayloadAdmin: + return "admn" + case PayloadClientPublic: + return "cpub" + case PayloadClientConfidential: + return "ccnf" + } + return "unknown" +} + type Agent struct { Id int32 `json:"id,omitempty"` Addr string `json:"addr,omitempty"` diff --git a/web/web.go b/web/web.go index 6c8bb57..1749c23 100644 --- a/web/web.go +++ b/web/web.go @@ -51,15 +51,17 @@ func (s *Server) Run() error { ErrorHandler: ErrorHandler, }) - s.fiber.Use(logger.New(logger.Config{ - DisableColors: false, - })) s.fiber.Use(requestid.New(requestid.Config{ Generator: func() string { binary, _ := uuid.New().MarshalBinary() return base62.EncodeToString(binary) }, })) + s.fiber.Use(logger.New(logger.Config{ + Format: "🚀 ${time} | ${locals:authtype} ${locals:authid} | ${method} ${path} | ${status} | ${latency} | ${error}\n", + TimeFormat: "2006-01-02 15:04:05", + TimeZone: "Asia/Shanghai", + })) ApplyRouters(s.fiber)