From 7b263b7b763ec00438f4aafdd5d1429f6e26de30 Mon Sep 17 00:00:00 2001 From: keven1024 Date: Sat, 24 May 2025 15:35:57 +0800 Subject: [PATCH] feat(backend): add logging middleware and image compression endpoints, enhance environment variable handling --- backend/internal/utils/env.go | 12 +++++++++++- backend/internal/utils/redis.go | 2 +- backend/internal/utils/zap.go | 22 ++++++++++++++++++++++ backend/main.go | 1 + backend/middleware/logger.go | 26 ++++++++++++++++++++++++++ 5 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 backend/internal/utils/zap.go create mode 100644 backend/middleware/logger.go diff --git a/backend/internal/utils/env.go b/backend/internal/utils/env.go index dcd8893..dc308cf 100644 --- a/backend/internal/utils/env.go +++ b/backend/internal/utils/env.go @@ -4,12 +4,21 @@ import ( "github.com/spf13/viper" ) -var v = viper.New() +var v *viper.Viper func init() { + InitEnv() +} + +func InitEnv() { + if v != nil { + return + } + v = viper.New() v.SetConfigName(".env") v.SetConfigType("env") v.AddConfigPath(".") + v.AddConfigPath("../") v.AutomaticEnv() if err := v.ReadInConfig(); err != nil { panic(err) @@ -17,6 +26,7 @@ func init() { } func GetEnv(key string) string { + InitEnv() return v.GetString(key) } diff --git a/backend/internal/utils/redis.go b/backend/internal/utils/redis.go index 87ad0df..f770d76 100644 --- a/backend/internal/utils/redis.go +++ b/backend/internal/utils/redis.go @@ -10,7 +10,7 @@ var rdb *redis.Client = InitRedis() var ctx = context.Background() func InitRedis() *redis.Client { - opt, err := redis.ParseURL("redis://192.168.100.5:6379/3") + opt, err := redis.ParseURL(GetEnv("REDIS_URL")) if err != nil { panic(err) } diff --git a/backend/internal/utils/zap.go b/backend/internal/utils/zap.go new file mode 100644 index 0000000..14588bc --- /dev/null +++ b/backend/internal/utils/zap.go @@ -0,0 +1,22 @@ +package utils + +import "go.uber.org/zap" + +var sugar *zap.SugaredLogger + +func init() { + InitLogClient() +} + +func InitLogClient() { + if sugar != nil { + return + } + logger, _ := zap.NewProduction() + sugar = logger.Sugar() +} + +func GetLogClient() *zap.SugaredLogger { + InitLogClient() + return sugar +} diff --git a/backend/main.go b/backend/main.go index 8a79231..0e9ba0e 100644 --- a/backend/main.go +++ b/backend/main.go @@ -13,6 +13,7 @@ func main() { e.Use(middleware.SessionMiddleware()) e.Use(middleware.AuthMiddleware()) e.Use(middleware.RateLimiterMiddleware()) + e.Use(middleware.LoggerMiddleware()) e.POST("/file/create", controllers.CreateUploadTask) e.POST("/file/slice", controllers.UploadFileSlice) diff --git a/backend/middleware/logger.go b/backend/middleware/logger.go new file mode 100644 index 0000000..128d136 --- /dev/null +++ b/backend/middleware/logger.go @@ -0,0 +1,26 @@ +package middleware + +import ( + "backend/internal/utils" + + "github.com/labstack/echo/v4" + "github.com/labstack/echo/v4/middleware" + "go.uber.org/zap" +) + +func LoggerMiddleware() echo.MiddlewareFunc { + log := utils.GetLogClient() + return middleware.RequestLoggerWithConfig(middleware.RequestLoggerConfig{ + LogURI: true, + LogStatus: true, + LogValuesFunc: func(c echo.Context, v middleware.RequestLoggerValues) error { + log.Info("request", + zap.String("url", v.URI), + zap.Int("status", v.Status), + zap.String("method", v.Method), + zap.String("ip", v.RemoteIP), + ) + return nil + }, + }) +}