Browse Source

Merge pull request #17 from granty1/master

Modify the logic of log
蒋吉兆 5 years ago
parent
commit
e62730149c
2 changed files with 51 additions and 36 deletions
  1. 2 18
      QMPlusServer/controller/servers/reportformat.go
  2. 49 18
      QMPlusServer/middleware/logger.go

+ 2 - 18
QMPlusServer/controller/servers/reportformat.go

@@ -1,29 +1,13 @@
 package servers
 
 import (
-	"gin-vue-admin/init/qmlog"
-	"github.com/gin-gonic/gin"
 	"net/http"
-	"time"
+
+	"github.com/gin-gonic/gin"
 )
 
 func ReportFormat(c *gin.Context, success bool, msg string, json gin.H) {
 	// 开始时间
-	start := time.Now()
-	path := c.Request.URL.Path
-	clientIP := c.ClientIP()
-	method := c.Request.Method
-	statusCode := c.Writer.Status()
-	qmlog.QMLog.Infof("| %3d | %13v | %15s | %s  %s |%s|",
-		statusCode,
-		start,
-		clientIP,
-		method, path, gin.H{
-			"success": success,
-			"msg":     msg,
-			"data":    json,
-		},
-	)
 	c.JSON(http.StatusOK, gin.H{
 		"success": success,
 		"msg":     msg,

+ 49 - 18
QMPlusServer/middleware/logger.go

@@ -1,34 +1,65 @@
 package middleware
 
 import (
+	"bytes"
 	"gin-vue-admin/init/qmlog"
-	"github.com/gin-gonic/gin"
+	"net/http/httputil"
+	"strings"
 	"time"
+
+	"github.com/gin-gonic/gin"
 )
 
 func Logger() gin.HandlerFunc {
+	log := qmlog.QMLog
 	return func(c *gin.Context) {
-		// 开始时间
+		// request time
 		start := time.Now()
-		// 处理请求
-		c.Next()
-		// 结束时间
-		end := time.Now()
-		//执行时间
-		latency := end.Sub(start)
-
+		// request path
 		path := c.Request.URL.Path
+		logFlag := true
+		if strings.Contains(path, "swagger") {
+			logFlag = false
+		}
+		// request ip
 		clientIP := c.ClientIP()
+		// method
 		method := c.Request.Method
+		// copy request content
+		req, _ := httputil.DumpRequest(c.Request, true)
+		if logFlag {
+			log.Infof(`| %s | %s | %s | %5s | %s\n`,
+				`Request :`, method, clientIP, path, string(req))
+		}
+		// replace writer
+		cusWriter := &responseBodyWriter{
+			ResponseWriter: c.Writer,
+			body:           bytes.NewBufferString(""),
+		}
+		c.Writer = cusWriter
+		// handle request
+		c.Next()
+		// ending time
+		end := time.Now()
+		//execute time
+		latency := end.Sub(start)
 		statusCode := c.Writer.Status()
-		buf := make([]byte, 1024)
-		n, _ := c.Request.Body.Read(buf)
-		requestParams := buf[0:n]
-		qmlog.QMLog.Infof("| %3d | %13v | %15s | %s  %s |%s|",
-			statusCode,
-			latency,
-			clientIP,
-			method, path, requestParams,
-		)
+		if logFlag {
+			log.Infof(`| %s | %3d | %13v | %s \n`,
+				`Response:`,
+				statusCode,
+				latency,
+				cusWriter.body.String())
+		}
 	}
 }
+
+type responseBodyWriter struct {
+	gin.ResponseWriter
+	body *bytes.Buffer
+}
+
+func (w responseBodyWriter) Write(b []byte) (int, error) {
+	w.body.Write(b)
+	return w.ResponseWriter.Write(b)
+}