|
@@ -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()
|
|
|
|
+}
|