重构迁移核心数据结构到认证模块;完善中间件初始化逻辑以及 logger 记录过程
This commit is contained in:
108
web/web.go
108
web/web.go
@@ -1,21 +1,27 @@
|
||||
package web
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
g "platform/web/globals"
|
||||
"runtime"
|
||||
|
||||
"log/slog"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gofiber/fiber/v2/middleware/logger"
|
||||
"github.com/gofiber/fiber/v2/middleware/requestid"
|
||||
"github.com/google/uuid"
|
||||
"github.com/jxskiss/base62"
|
||||
|
||||
"log/slog"
|
||||
"net/http"
|
||||
_ "net/http/pprof"
|
||||
"platform/web/auth"
|
||||
"platform/web/core"
|
||||
g "platform/web/globals"
|
||||
m "platform/web/models"
|
||||
q "platform/web/queries"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// region web
|
||||
|
||||
type Config struct {
|
||||
Listen string
|
||||
}
|
||||
@@ -51,18 +57,11 @@ func (s *Server) Run() error {
|
||||
ErrorHandler: ErrorHandler,
|
||||
})
|
||||
|
||||
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",
|
||||
}))
|
||||
// middlewares
|
||||
s.fiber.Use(useRequestId())
|
||||
s.fiber.Use(useLogger())
|
||||
|
||||
// routes
|
||||
ApplyRouters(s.fiber)
|
||||
|
||||
// pprof
|
||||
@@ -91,3 +90,76 @@ func (s *Server) Stop() {
|
||||
slog.Error("Failed to shutdown server", slog.Any("err", err))
|
||||
}
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region requestid
|
||||
|
||||
func useRequestId() fiber.Handler {
|
||||
return requestid.New(requestid.Config{
|
||||
Generator: func() string {
|
||||
binary, _ := uuid.New().MarshalBinary()
|
||||
return base62.EncodeToString(binary)
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region logger
|
||||
|
||||
func useLogger() fiber.Handler {
|
||||
return 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",
|
||||
Done: func(c *fiber.Ctx, logBytes []byte) {
|
||||
var logStr = strings.TrimPrefix(string(logBytes), "🚀")
|
||||
var logVars = strings.Split(logStr, "|")
|
||||
|
||||
var reqTimeStr = strings.TrimSpace(logVars[0])
|
||||
reqTime, err := time.ParseInLocation("2006-01-02 15:04:05", reqTimeStr, time.Local)
|
||||
if err != nil {
|
||||
slog.Error("时间解析错误", slog.Any("err", err))
|
||||
return
|
||||
}
|
||||
|
||||
var authInfo = strings.Split(strings.TrimSpace(logVars[1]), " ")
|
||||
var authType = auth.PayloadTypeFromStr(strings.TrimSpace(authInfo[0]))
|
||||
authID, err := strconv.Atoi(strings.TrimSpace(authInfo[1]))
|
||||
if err != nil {
|
||||
slog.Error("负载ID解析错误", slog.Any("err", err))
|
||||
return
|
||||
}
|
||||
|
||||
var latency = strings.TrimSpace(logVars[4])
|
||||
|
||||
var errStr = strings.TrimSpace(logVars[5])
|
||||
|
||||
var item = &m.LogsRequest{
|
||||
IP: c.IP(),
|
||||
Ua: c.Get("User-Agent"),
|
||||
Method: c.Method(),
|
||||
Path: c.Path(),
|
||||
Latency: latency,
|
||||
Status: int32(c.Response().StatusCode()),
|
||||
Error: errStr,
|
||||
Time: core.LocalDateTime(reqTime),
|
||||
}
|
||||
if authType != nil {
|
||||
item.Identity = int32(*authType)
|
||||
}
|
||||
if authID != 0 {
|
||||
item.Visitor = int32(authID)
|
||||
}
|
||||
|
||||
err = q.LogsRequest.Create(item)
|
||||
if err != nil {
|
||||
slog.Error("日志记录错误", slog.Any("err", err))
|
||||
return
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
Reference in New Issue
Block a user