From a39c9dab9b21443d4e2018fed984498d7e8925d9 Mon Sep 17 00:00:00 2001 From: hobostay <110hqc@gmail.com> Date: Fri, 6 Feb 2026 14:16:25 +0800 Subject: [PATCH] fix: replace standard log with structured logger in main and recovery middleware This PR continues the migration to structured logging by replacing the standard Go log package usage with the project's structured logger. Changes: - cmd/server/main.go: Replace all log.Printf, log.Println, log.Fatalf with logger.Infof, logger.Info, logger.Fatalf - internal/middleware/recovery.go: Replace log.Printf with logger.ErrorWithFields for better panic logging with structured data - Remove log.SetFlags and log.SetOutput from main.go as they're no longer needed with the structured logger Benefits: - Consistent logging format across the entire application - Better log parsing and analysis with structured fields - Request ID tracking in recovery middleware for easier debugging - Proper integration with the project's logging configuration Co-Authored-By: Claude Sonnet 4.5 --- cmd/server/main.go | 20 ++++++++------------ internal/middleware/recovery.go | 13 +++++++++---- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/cmd/server/main.go b/cmd/server/main.go index e27f431ee..51b571be6 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -25,7 +25,6 @@ package main import ( "context" "fmt" - "log" "net/http" "os" "os/signal" @@ -36,16 +35,13 @@ import ( "github.com/Tencent/WeKnora/internal/config" "github.com/Tencent/WeKnora/internal/container" + "github.com/Tencent/WeKnora/internal/logger" "github.com/Tencent/WeKnora/internal/runtime" "github.com/Tencent/WeKnora/internal/tracing" "github.com/Tencent/WeKnora/internal/types/interfaces" ) func main() { - // Set log format with request ID - log.SetFlags(log.LstdFlags | log.Lmicroseconds | log.Lshortfile) - log.SetOutput(os.Stdout) - // Set Gin mode if os.Getenv("GIN_MODE") == "release" { gin.SetMode(gin.ReleaseMode) @@ -87,29 +83,29 @@ func main() { signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP) go func() { sig := <-signals - log.Printf("Received signal: %v, starting server shutdown...", sig) + logger.Infof(context.Background(), "Received signal: %v, starting server shutdown...", sig) // Create a context with timeout for server shutdown shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), 30*time.Second) defer shutdownCancel() if err := server.Shutdown(shutdownCtx); err != nil { - log.Fatalf("Server forced to shutdown: %v", err) + logger.Fatalf(context.Background(), "Server forced to shutdown: %v", err) } // Clean up all registered resources - log.Println("Cleaning up resources...") + logger.Info(context.Background(), "Cleaning up resources...") errs := resourceCleaner.Cleanup(cleanupCtx) if len(errs) > 0 { - log.Printf("Errors occurred during resource cleanup: %v", errs) + logger.Errorf(context.Background(), "Errors occurred during resource cleanup: %v", errs) } - log.Println("Server has exited") + logger.Info(context.Background(), "Server has exited") done() }() // Start server - log.Printf("Server is running at %s:%d", cfg.Server.Host, cfg.Server.Port) + logger.Infof(context.Background(), "Server is running at %s:%d", cfg.Server.Host, cfg.Server.Port) if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { return fmt.Errorf("failed to start server: %v", err) } @@ -119,6 +115,6 @@ func main() { return nil }) if err != nil { - log.Fatalf("Failed to run application: %v", err) + logger.Fatalf(context.Background(), "Failed to run application: %v", err) } } diff --git a/internal/middleware/recovery.go b/internal/middleware/recovery.go index 9b60f13ba..765f7eeb8 100644 --- a/internal/middleware/recovery.go +++ b/internal/middleware/recovery.go @@ -2,9 +2,10 @@ package middleware import ( "fmt" - "log" "runtime/debug" + "github.com/sirupsen/logrus" + "github.com/Tencent/WeKnora/internal/logger" "github.com/gin-gonic/gin" ) @@ -13,13 +14,17 @@ func Recovery() gin.HandlerFunc { return func(c *gin.Context) { defer func() { if err := recover(); err != nil { - // Get request ID + // Get request ID from context + ctx := c.Request.Context() requestID, _ := c.Get("RequestID") // Print stacktrace stacktrace := debug.Stack() - // Log error - log.Printf("[PANIC] %s | %v | %s", requestID, err, stacktrace) + // Log error with structured logger + logger.ErrorWithFields(ctx, fmt.Errorf("panic: %v", err), logrus.Fields{ + "request_id": requestID, + "stacktrace": string(stacktrace), + }) // 返回500错误 c.AbortWithStatusJSON(500, gin.H{