refactor: 全面集成 slog 日志到 handler、service、middleware

- cmd/main.go: 集成 logger.Init 和日志中间件,替换标准 log 包
- handler 层: 5xx 错误记录完整日志,返回通用消息(防内部信息泄露)
- service 层: LLM/图片生成/存储/认证等关键操作补充结构化日志
- auth 中间件: 记录认证失败原因
- generate.go: 后台管线任务使用带 task_id 的 logger
This commit is contained in:
2026-05-25 14:31:04 +08:00
parent 681bc8f472
commit 25c11ed649
13 changed files with 159 additions and 39 deletions
+18 -12
View File
@@ -3,11 +3,12 @@ package main
import (
"fmt"
"log"
"log/slog"
"gen2d/internal/config"
"gen2d/internal/db"
"gen2d/internal/handler"
"gen2d/internal/logger"
"gen2d/internal/mildware"
"gen2d/internal/model"
"gen2d/internal/service"
@@ -18,11 +19,15 @@ import (
func main() {
cfg := config.Load()
// 初始化日志
logger.Init(cfg.Log.Level, cfg.Log.Format)
gin.SetMode(cfg.Server.Mode)
// 初始化 SQLite 数据库
if err := db.Init(cfg.Database.DSN, &model.User{}); err != nil {
log.Fatalf("db init failed: %v", err)
slog.Error("db init failed", "error", err)
return
}
// 初始化 AuthService,注入 JWT 配置
@@ -37,24 +42,25 @@ func main() {
handler.InitStorageService(storageSvc)
r := gin.New()
r.Use(gin.Recovery()) // panic 恢复中间件,防止服务因未捕获异常宕机
r.Use(mildware.Logger())
r.Use(mildware.Recovery())
// API v1 路由组 — 公开接口
v1 := r.Group("/api/v1")
{
v1.GET("/health", handler.Health) // 健康检查
v1.POST("/prompt/optimize", handler.PromptOptimize) // 提示词优化
v1.GET("/assets/download", handler.DownloadAsset) // 素材下载
v1.GET("/health", handler.Health) // 健康检查
v1.POST("/prompt/optimize", handler.PromptOptimize) // 提示词优化
v1.GET("/assets/download", handler.DownloadAsset) // 素材下载
}
// API v1 路由组 — 需认证
v1Auth := r.Group("/api/v1")
v1Auth.Use(mildware.AuthMiddleware(cfg.JWT.Secret))
{
v1Auth.POST("/generate", handler.Generate) // 素材生成管线
v1Auth.GET("/tasks/:taskId", handler.GetTask) // 查询任务
v1Auth.GET("/tasks/:taskId/assets", handler.GetAssets) // 查询任务素材
v1Auth.POST("/images/edit", handler.EditImage) // 图片编辑
v1Auth.POST("/generate", handler.Generate) // 素材生成管线
v1Auth.GET("/tasks/:taskId", handler.GetTask) // 查询任务
v1Auth.GET("/tasks/:taskId/assets", handler.GetAssets) // 查询任务素材
v1Auth.POST("/images/edit", handler.EditImage) // 图片编辑
}
// Auth 路由组
@@ -65,8 +71,8 @@ func main() {
}
addr := fmt.Sprintf(":%d", cfg.Server.Port)
log.Printf("gen2d backend starting on %s", addr)
slog.Info("gen2d backend starting", "addr", addr, "mode", cfg.Server.Mode)
if err := r.Run(addr); err != nil {
log.Fatalf("server failed: %v", err)
slog.Error("server failed", "error", err)
}
}