Add recovery middleware to handle panics and log errors
This commit is contained in:
@ -36,6 +36,7 @@ var startCmd = &cobra.Command{
|
|||||||
|
|
||||||
// Create middleware stack
|
// Create middleware stack
|
||||||
stack := middleware.CreateStack(
|
stack := middleware.CreateStack(
|
||||||
|
middleware.Recovery(), // Add recovery middleware first to catch all panics
|
||||||
middleware.SecureHeaders,
|
middleware.SecureHeaders,
|
||||||
middleware.Logging,
|
middleware.Logging,
|
||||||
middleware.MaxBodySize(1024*1024), // 1MB size limit
|
middleware.MaxBodySize(1024*1024), // 1MB size limit
|
||||||
@ -74,4 +75,4 @@ func init() {
|
|||||||
|
|
||||||
// Add the command to the root command
|
// Add the command to the root command
|
||||||
rootCmd.AddCommand(startCmd)
|
rootCmd.AddCommand(startCmd)
|
||||||
}
|
}
|
27
internal/middleware/recover.go
Normal file
27
internal/middleware/recover.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package middleware
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"runtime/debug"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Recovery middleware to catch panics, log them, and return a 500 error
|
||||||
|
func Recovery() Middleware {
|
||||||
|
return func(next http.Handler) http.Handler {
|
||||||
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
defer func() {
|
||||||
|
if err := recover(); err != nil {
|
||||||
|
// Log the stack trace
|
||||||
|
log.Printf("PANIC: %v\n%s", err, debug.Stack())
|
||||||
|
|
||||||
|
// Return a 500 Internal Server Error response
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
w.Write([]byte("Internal Server Error"))
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
next.ServeHTTP(w, r)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user