Browse Source

Better logger

 - Includes http method
 - Includes coloured status code
 - Better formatting
Manu Mtz-Almeida 11 năm trước cách đây
mục cha
commit
78536abb58
1 tập tin đã thay đổi với 31 bổ sung3 xóa
  1. 31 3
      logger.go

+ 31 - 3
logger.go

@@ -3,6 +3,7 @@ package gin
 import (
 	"fmt"
 	"log"
+	"os"
 	"time"
 )
 
@@ -17,17 +18,44 @@ func ErrorLogger() HandlerFunc {
 	}
 }
 
+var (
+	green  = string([]byte{27, 91, 57, 55, 59, 52, 50, 109})
+	white  = string([]byte{27, 91, 57, 48, 59, 52, 55, 109})
+	yellow = string([]byte{27, 91, 57, 55, 59, 52, 51, 109})
+	red    = string([]byte{27, 91, 57, 55, 59, 52, 49, 109})
+	reset  = string([]byte{27, 91, 48, 109})
+)
+
 func Logger() HandlerFunc {
+	logger := log.New(os.Stdout, "", 0)
 	return func(c *Context) {
-
 		// Start timer
-		t := time.Now()
+		start := time.Now()
 
 		// Process request
 		c.Next()
 
+		var color string
+		code := c.Writer.Status()
+		switch {
+		case code >= 200 && code <= 299:
+			color = green
+		case code >= 300 && code <= 399:
+			color = white
+		case code >= 400 && code <= 499:
+			color = yellow
+		default:
+			color = red
+		}
+		latency := time.Since(start)
+		logger.Printf("[GIN] %v |%s %3d %s| %12v | %3s %s\n",
+			time.Now().Format("2006/01/02 - 15:04:05"),
+			color, c.Writer.Status(), reset,
+			latency,
+			c.Req.Method, c.Req.URL.Path,
+		)
+
 		// Calculate resolution time
-		log.Printf("%s in %v", c.Req.RequestURI, time.Since(t))
 		if len(c.Errors) > 0 {
 			fmt.Println(c.Errors.String())
 		}