feat(backend): add logging middleware and image compression endpoints, enhance environment variable handling

This commit is contained in:
keven1024
2025-05-24 15:35:57 +08:00
parent 9d8de69f9f
commit 7b263b7b76
5 changed files with 61 additions and 2 deletions

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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
},
})
}