mirror of
https://github.com/Tencent/WeKnora.git
synced 2026-08-30 16:53:21 +08:00
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 <noreply@anthropic.com>
This commit is contained in:
+8
-12
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user