Panic: Add Handler

Signed-off-by: xiekeyang <xiekeyang@huawei.com>
This commit is contained in:
xiekeyang 2015-06-02 10:52:24 +08:00 committed by xiekeyang
parent cd7d977fe6
commit aa73c53690

View file

@ -62,6 +62,7 @@ func main() {
app := handlers.NewApp(ctx, *config) app := handlers.NewApp(ctx, *config)
handler := configureReporting(app) handler := configureReporting(app)
handler = panicHandler(handler)
handler = gorhandlers.CombinedLoggingHandler(os.Stdout, handler) handler = gorhandlers.CombinedLoggingHandler(os.Stdout, handler)
if config.HTTP.Debug.Addr != "" { if config.HTTP.Debug.Addr != "" {
@ -273,3 +274,17 @@ func debugServer(addr string) {
log.Fatalf("error listening on debug interface: %v", err) log.Fatalf("error listening on debug interface: %v", err)
} }
} }
// panicHandler add a HTTP handler to web app. The handler recover the happening
// panic. logrus.Panic transmits panic message to pre-config log hooks, which is
// defined in config.yml.
func panicHandler(handler http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer func() {
if err := recover(); err != nil {
log.Panic(fmt.Sprintf("%v", err))
}
}()
handler.ServeHTTP(w, r)
})
}