Files
dokku-ui/internal/server/middleware/recover.go
2023-04-25 14:33:14 +08:00

32 lines
909 B
Go

package middleware
import (
"github.com/labstack/echo/v4"
echoMiddleware "github.com/labstack/echo/v4/middleware"
"github.com/rs/zerolog"
"strings"
)
func logErrorFunc(logger zerolog.Logger, debug bool) echoMiddleware.LogErrorFunc {
return func(c echo.Context, err error, stack []byte) error {
event := logger.Error().Err(err)
if debug {
stacklines := strings.Split(string(stack), "\n")
funcName := strings.TrimRight(strings.SplitAfter(stacklines[5], "(0x")[0], "(0x")
callSite := strings.Trim(strings.SplitAfter(stacklines[6], " ")[0], "\t ")
event.Str("func", funcName)
event.Str("callsite", callSite)
}
event.Msg("Recovered from panic")
return nil
}
}
func Recover(debug bool) echo.MiddlewareFunc {
logger := middlewareLogger("recover")
cfg := echoMiddleware.RecoverConfig{
LogErrorFunc: logErrorFunc(logger, debug),
}
return echoMiddleware.RecoverWithConfig(cfg)
}