diff --git a/gin.go b/gin.go index 9c294203..19a1ffa3 100644 --- a/gin.go +++ b/gin.go @@ -1,8 +1,10 @@ package gin import ( + "bytes" "encoding/json" "encoding/xml" + "fmt" "github.com/julienschmidt/httprouter" "html/template" "log" @@ -22,17 +24,19 @@ type ( // Used internally to collect a error ocurred during a http request. ErrorMsg struct { - Message string `json:"msg"` - Meta interface{} `json:"meta"` + Err string `json:"error"` + Meta interface{} `json:"meta"` } + ErrorMsgs []ErrorMsg + // Context is the most important part of gin. It allows us to pass variables between middleware, // manage the flow, validate the JSON of a request and render a JSON response for example. Context struct { Req *http.Request Writer http.ResponseWriter Keys map[string]interface{} - Errors []ErrorMsg + Errors ErrorMsgs Params httprouter.Params handlers []HandlerFunc engine *Engine @@ -57,6 +61,15 @@ type ( } ) +func (a ErrorMsgs) String() string { + var buffer bytes.Buffer + for i, msg := range a { + text := fmt.Sprintf("Error #%02d: %s \n Meta: %v\n\n", (i + 1), msg.Err, msg.Meta) + buffer.WriteString(text) + } + return buffer.String() +} + // Returns a new blank Engine instance without any middleware attached. // The most basic configuration func New() *Engine { @@ -240,8 +253,8 @@ func (c *Context) Fail(code int, err error) { // A middleware can be used to collect all the errors and push them to a database together, print a log, or append it in the HTTP response. func (c *Context) Error(err error, meta interface{}) { c.Errors = append(c.Errors, ErrorMsg{ - Message: err.Error(), - Meta: meta, + Err: err.Error(), + Meta: meta, }) } diff --git a/logger.go b/logger.go index dbd3c1ea..7f0abdb4 100644 --- a/logger.go +++ b/logger.go @@ -29,7 +29,7 @@ func Logger() HandlerFunc { // Calculate resolution time log.Printf("%s in %v", c.Req.RequestURI, time.Since(t)) if len(c.Errors) > 0 { - fmt.Println(c.Errors) + fmt.Println(c.Errors.String()) } } } diff --git a/recovery.go b/recovery.go index cbde0e8a..15066c8e 100644 --- a/recovery.go +++ b/recovery.go @@ -83,7 +83,7 @@ func Recovery() HandlerFunc { return func(c *Context) { defer func() { if len(c.Errors) > 0 { - log.Println(c.Errors) + log.Println(c.Errors.String()) } if err := recover(); err != nil { stack := stack(3)