Jelajahi Sumber

feat:mgo 保存路由请求日志

wangshan 3 tahun lalu
induk
melakukan
47cb84b799
1 mengubah file dengan 64 tambahan dan 0 penghapusan
  1. 64 0
      common/mgosl.go

+ 64 - 0
common/mgosl.go

@@ -0,0 +1,64 @@
+/*
+*中台api mongodb 保存请求日志
+*
+ */
+package common
+
+import (
+	"app.yhyue.com/moapp/jybase/mongodb"
+	"encoding/json"
+	"log"
+	"net/http"
+	"regexp"
+	"sync"
+	"time"
+)
+
+var (
+	arr = map[string][]map[string]interface{}{}
+	//对map的同步
+	saveLogsLock = &sync.Mutex{}
+)
+
+func AddMgoLogs(mgoLog mongodb.MongodbSim, r *http.Request, tableName string, ExcludeUrl []*regexp.Regexp) {
+	for _, v := range ExcludeUrl {
+		// 过滤无意义路由日志
+		if v.MatchString(r.URL.Path) {
+			return
+		}
+	}
+	timeNow := time.Now()
+	agent := r.Header.Get("user-agent")
+	ref := r.Referer()
+	s_url := r.RequestURI
+	md, _ := json.Marshal(r.Form)
+	str := string(md)
+	logs := map[string]interface{}{
+		"date":      timeNow.Unix(),
+		"ip":        GetIp(r),
+		"refer":     ref,
+		"year":      timeNow.Year(),
+		"month":     timeNow.Month(),
+		"day":       timeNow.Day(),
+		"hour":      timeNow.Hour(),
+		"minutes":   timeNow.Minute(),
+		"mdescribe": str,
+		"client":    agent,
+		"os":        GetOS(agent),
+		"browse":    GetBrowse(agent),
+		"method":    r.Method,
+		"url":       s_url,
+		"userid":    r.Header.Get("userId"),
+	}
+	saveLogsLock.Lock()
+	arr[tableName] = append(arr[tableName], logs)
+	if len(arr[tableName]) >= 500 {
+		tmp := arr[tableName]
+		arr[tableName] = make([]map[string]interface{}, 0)
+		go func() {
+			log.Println("save..visit..log", len(tmp))
+			mgoLog.SaveBulk(tableName, tmp...)
+		}()
+	}
+	saveLogsLock.Unlock()
+}