package logs import ( "bp.jydev.jianyu360.cn/BaseService/gateway/common/db" "bp.jydev.jianyu360.cn/BaseService/gateway/core/router" "encoding/json" "github.com/gogf/gf/v2/net/ghttp" "log" "strings" "sync" "time" ) var ( arr = []map[string]interface{}{} //对map的同步 lock = &sync.Mutex{} ) //SaveLogTask 定时保存日志 func (s *serverLog) SaveLogTask() { lock.Lock() if len(arr) >= 1 { tmp := arr arr = make([]map[string]interface{}, 0) go func() { log.Println("timer..save..visit..log", len(tmp)) db.MgoLog.SaveBulk("jy_logs", tmp...) }() } lock.Unlock() time.AfterFunc(5*time.Minute, s.SaveLogTask) } // saveLogToDb 日志存库 func (s *serverLog) saveLogToDb(ctx *router.GContext, r *ghttp.Request) { md, _ := json.Marshal(r.Request.Form) m := map[string]interface{}{ "ip": r.GetClientIp(), "refer": r.Referer(), "mdescribe": string(md), "client": r.UserAgent(), "os": getOS(r.UserAgent()), "browse": getBrowse(r.UserAgent()), "method": r.Method, "url": r.URL.String(), } if ctx.Sess != nil { if ctx.Sess.UserId != "" { m["userid"] = ctx.Sess.UserId } if ctx.Sess.NewUid != 0 { m["userid_new"] = ctx.Sess.NewUid } if ctx.Sess.EntId != 0 { m["userid"] = ctx.Sess.EntId } } timeNow := time.Now() m["date"] = timeNow.Unix() m["year"] = timeNow.Year() m["month"] = timeNow.Month() m["day"] = timeNow.Day() m["hour"] = timeNow.Hour() m["minutes"] = timeNow.Minute() lock.Lock() arr = append(arr, m) if len(arr) >= 500 { tmp := arr arr = make([]map[string]interface{}, 0) go func() { log.Println("save..visit..log", len(tmp), db.MgoLog.SaveBulk("jy_gateway_logs", tmp...)) }() } lock.Unlock() } // getOS 获取平台类型 func getOS(useros string) string { osVersion := "其他" if strings.Contains(useros, "NT 6.0") { osVersion = "Windows Vista/Server 2008" } else if strings.Contains(useros, "NT 5.2") { osVersion = "Windows Server 2003" } else if strings.Contains(useros, "NT 5.1") { osVersion = "Windows XP" } else if strings.Contains(useros, "NT 5") { osVersion = "Windows 2000" } else if strings.Contains(useros, "Mac") { osVersion = "Mac" } else if strings.Contains(useros, "Unix") { osVersion = "UNIX" } else if strings.Contains(useros, "Linux") { osVersion = "Linux" } else if strings.Contains(useros, "SunOS") { osVersion = "SunOS" } else if strings.Contains(useros, "NT 6.3") { osVersion = "Window8" } else if strings.Contains(useros, "NT 6.1") { osVersion = "Window7" } else if strings.Contains(useros, "NT 10.0") { osVersion = "Window10" } return osVersion } // getBrowse 获取浏览器类型 func getBrowse(userbrowser string) string { browserVersion := "其他" if strings.Contains(userbrowser, "MSIE") { browserVersion = "IE" } else if strings.Contains(userbrowser, "Firefox") { browserVersion = "Firefox" } else if strings.Contains(userbrowser, "Chrome") { browserVersion = "Chrome" } else if strings.Contains(userbrowser, "Safari") { browserVersion = "Safari" } else if strings.Contains(userbrowser, "rv:11.0") { browserVersion = "IE11" } return browserVersion }