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{