From 66fa76f0f0406b6b2b44b3860802baccf239a60a Mon Sep 17 00:00:00 2001 From: letsfire <249008728@qq.com> Date: Sun, 13 Oct 2019 12:48:50 +0800 Subject: [PATCH 1/2] Add RecoveryWithWriterAndCallback --- recovery.go | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/recovery.go b/recovery.go index bc946c03..3d4e588d 100644 --- a/recovery.go +++ b/recovery.go @@ -33,6 +33,18 @@ func Recovery() HandlerFunc { // RecoveryWithWriter returns a middleware for a given writer that recovers from any panics and writes a 500 if there was one. func RecoveryWithWriter(out io.Writer) HandlerFunc { + return RecoveryWithWriterAndCallback(out, func(c *Context, err interface{}, brokenPipe bool) { + // If the connection is dead, we can't write a status to it. + if brokenPipe { + c.Error(err.(error)) // nolint: errcheck + c.Abort() + } else { + c.AbortWithStatus(http.StatusInternalServerError) + } + }) +} + +func RecoveryWithWriterAndCallback(out io.Writer, fn func(c *Context, err interface{}, brokenPipe bool)) HandlerFunc { var logger *log.Logger if out != nil { logger = log.New(out, "\n\n\x1b[31m", log.LstdFlags) @@ -70,14 +82,7 @@ func RecoveryWithWriter(out io.Writer) HandlerFunc { timeFormat(time.Now()), err, stack, reset) } } - - // If the connection is dead, we can't write a status to it. - if brokenPipe { - c.Error(err.(error)) // nolint: errcheck - c.Abort() - } else { - c.AbortWithStatus(http.StatusInternalServerError) - } + fn(c, err, brokenPipe) } }() c.Next() From 47190b0bbf199e0f0a7025d1c20ba31c9f427d18 Mon Sep 17 00:00:00 2001 From: letsfire <249008728@qq.com> Date: Sun, 13 Oct 2019 16:30:15 +0800 Subject: [PATCH 2/2] Add Comment Block --- recovery.go | 1 + 1 file changed, 1 insertion(+) diff --git a/recovery.go b/recovery.go index 3d4e588d..0ec76d27 100644 --- a/recovery.go +++ b/recovery.go @@ -44,6 +44,7 @@ func RecoveryWithWriter(out io.Writer) HandlerFunc { }) } +// RecoveryWithWriterAndCallback returns a middleware for a given writer that recovers from any panics and call the custom function if there was one. func RecoveryWithWriterAndCallback(out io.Writer, fn func(c *Context, err interface{}, brokenPipe bool)) HandlerFunc { var logger *log.Logger if out != nil {