Explorar o código

Improves Recovery middleware:

- request context
- red colouring
Manu Mtz.-Almeida %!s(int64=10) %!d(string=hai) anos
pai
achega
7afb3238a3
Modificáronse 2 ficheiros con 5 adicións e 3 borrados
  1. 1 1
      gin.go
  2. 4 2
      recovery.go

+ 1 - 1
gin.go

@@ -113,7 +113,7 @@ func New() *Engine {
 // Default returns an Engine instance with the Logger and Recovery middleware already attached.
 func Default() *Engine {
 	engine := New()
-	engine.Use(Recovery(), Logger())
+	engine.Use(Logger(), Recovery())
 	return engine
 }
 

+ 4 - 2
recovery.go

@@ -10,6 +10,7 @@ import (
 	"io"
 	"io/ioutil"
 	"log"
+	"net/http/httputil"
 	"runtime"
 )
 
@@ -28,14 +29,15 @@ func Recovery() HandlerFunc {
 func RecoveryWithWriter(out io.Writer) HandlerFunc {
 	var logger *log.Logger
 	if out != nil {
-		logger = log.New(out, "", log.LstdFlags)
+		logger = log.New(out, "\n\n\x1b[31m", log.LstdFlags)
 	}
 	return func(c *Context) {
 		defer func() {
 			if err := recover(); err != nil {
 				if logger != nil {
 					stack := stack(3)
-					logger.Printf("Panic recovery -> %s\n%s\n", err, stack)
+					httprequest, _ := httputil.DumpRequest(c.Request, false)
+					logger.Printf("[Recovery] panic recovered:\n%s\n%s\n%s %s", string(httprequest), err, stack, reset)
 				}
 				c.AbortWithStatus(500)
 			}