wms-be/middlewares/recovery_logger.go

44 lines
893 B
Go

package middlewares
import (
"fmt"
"net/http"
"runtime/debug"
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
)
func GinRecoveryWithLogrus(logger *logrus.Logger) gin.HandlerFunc {
return func(c *gin.Context) {
defer func() {
if r := recover(); r != nil {
// ambil message dari panic
var message string
switch v := r.(type) {
case string:
message = v
case error:
message = v.Error()
default:
message = fmt.Sprintf("%v", v)
}
logger.WithFields(logrus.Fields{
"panic": r,
"stack": string(debug.Stack()),
"path": c.Request.URL.Path,
"method": c.Request.Method,
}).Error("Recovered from panic in HTTP request")
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{
"status": false,
"error": "Internal Server Error",
"message": message,
})
}
}()
c.Next()
}
}