mirror of https://github.com/gin-gonic/gin.git
Improves error log formatting
This commit is contained in:
parent
4b62957d85
commit
f72fcdf5ba
23
gin.go
23
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,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue