22 lines
449 B
Go
22 lines
449 B
Go
package martini
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
"runtime/debug"
|
|
)
|
|
|
|
// Recovery returns a middleware that recovers from any panics and writes a 500 if there was one.
|
|
func Recovery() Handler {
|
|
return func(res http.ResponseWriter, c Context, logger *log.Logger) {
|
|
defer func() {
|
|
if err := recover(); err != nil {
|
|
res.WriteHeader(http.StatusInternalServerError)
|
|
logger.Printf("PANIC: %s\n%s", err, debug.Stack())
|
|
}
|
|
}()
|
|
|
|
c.Next()
|
|
}
|
|
}
|