|
@@ -1,129 +0,0 @@
|
|
|
-package logger
|
|
|
|
|
-
|
|
|
|
|
-import (
|
|
|
|
|
- "encoding/json"
|
|
|
|
|
- "strconv"
|
|
|
|
|
- "strings"
|
|
|
|
|
- "time"
|
|
|
|
|
-
|
|
|
|
|
- "git.qianqiusoft.com/public/glog"
|
|
|
|
|
- "git.qianqiusoft.com/qianqiusoft/light-apiengine/config"
|
|
|
|
|
- "github.com/gocql/gocql"
|
|
|
|
|
-)
|
|
|
|
|
-
|
|
|
|
|
-// cassandra 配置
|
|
|
|
|
-var _clusterCfg *gocql.ClusterConfig = nil
|
|
|
|
|
-
|
|
|
|
|
-func init() {
|
|
|
|
|
- // 设置cassandar 配置
|
|
|
|
|
- cassandra := config.AppConfig.GetKey("cassandra")
|
|
|
|
|
- keyspace := config.AppConfig.GetKey("keyspace")
|
|
|
|
|
- _clusterCfg = gocql.NewCluster(strings.Split(cassandra, ",")...)
|
|
|
|
|
- _clusterCfg.Keyspace = keyspace
|
|
|
|
|
- _clusterCfg.Consistency = gocql.Quorum
|
|
|
|
|
- //设置连接池的数量,默认是2个(针对每一个host,都建立起NumConns个连接)
|
|
|
|
|
- _clusterCfg.NumConns = 3
|
|
|
|
|
-
|
|
|
|
|
- session, err := _clusterCfg.CreateSession()
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- glog.Errorln("create session err", err.Error())
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
- time.Sleep(1 * time.Second) //Sleep so the fillPool can complete.
|
|
|
|
|
- defer session.Close()
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// cassandra 日志 处理接口
|
|
|
|
|
-func cassandraLogHandler(logInfo *LogInfo) {
|
|
|
|
|
- session, err := _clusterCfg.CreateSession()
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- glog.Errorln("创建cassandra session错误", err.Error())
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
- defer session.Close()
|
|
|
|
|
-
|
|
|
|
|
- var respBodyObj struct {
|
|
|
|
|
- Code int
|
|
|
|
|
- Msg string
|
|
|
|
|
- Data interface{}
|
|
|
|
|
- }
|
|
|
|
|
- if logInfo.RespBody != "" {
|
|
|
|
|
- err = json.Unmarshal([]byte(logInfo.RespBody), &respBodyObj)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- glog.Errorln("json.Unmarshal 错误", err.Error())
|
|
|
|
|
- } else {
|
|
|
|
|
- logInfo.RespCode = strconv.Itoa(respBodyObj.Code)
|
|
|
|
|
- logInfo.RespMsg = respBodyObj.Msg
|
|
|
|
|
- if respBodyObj.Data != nil {
|
|
|
|
|
- str, err := json.Marshal(respBodyObj.Data)
|
|
|
|
|
- if err == nil {
|
|
|
|
|
- logInfo.RespData = string(str)
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- logInfo.CostTime = float64(logInfo.RespTime.Sub(logInfo.ReqTime).Seconds())
|
|
|
|
|
-
|
|
|
|
|
- cqlformat := `insert into
|
|
|
|
|
- log_info(app_name, req_date, req_time, login_id, req_method, req_url, req_proto, req_ua, req_referer, req_post_data, resp_time, resp_body, resp_code, resp_msg, resp_data, cost_time)
|
|
|
|
|
- values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);`
|
|
|
|
|
- reqDate := logInfo.ReqTime.Format("20060102")
|
|
|
|
|
- //q := session.Query(cqlformat, __appName, reqDate, logInfo.ReqTime.Format("2006-01-02 15:04:05"), logInfo.ReqMethod, logInfo.ReqUrl, logInfo.ReqProto, logInfo.ReqUa, logInfo.ReqReferer, logInfo.ReqPostData, logInfo.RespTime.Format("2006-01-02 15:04:05"), logInfo.RespBody, logInfo.RespCode, logInfo.RespMsg, logInfo.RespData, logInfo.CostTime)
|
|
|
|
|
- batch := session.NewBatch(gocql.UnloggedBatch) // 应该批量插入多条,例如20条
|
|
|
|
|
- batch.Query(cqlformat, __appName, reqDate, logInfo.ReqTime.Format("2006-01-02 15:04:05"), logInfo.LoginId, logInfo.ReqMethod, logInfo.ReqUrl, logInfo.ReqProto, logInfo.ReqUa, logInfo.ReqReferer, strings.TrimSpace(logInfo.ReqPostData), logInfo.RespTime.Format("2006-01-02 15:04:05"), strings.TrimSpace(logInfo.RespBody), logInfo.RespCode, strings.TrimSpace(logInfo.RespMsg), strings.TrimSpace(logInfo.RespData), logInfo.CostTime)
|
|
|
|
|
- if err := session.ExecuteBatch(batch); err != nil {
|
|
|
|
|
- glog.Errorln("批量插入日志错误:", err)
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func GetLogByCassandra(appName, date, beginTime, endTime, loginId string) ([]map[string]interface{}, error) {
|
|
|
|
|
- session, err := _clusterCfg.CreateSession()
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- glog.Errorln("创建cassandra session错误", err.Error())
|
|
|
|
|
- return nil, err
|
|
|
|
|
- }
|
|
|
|
|
- defer session.Close()
|
|
|
|
|
-
|
|
|
|
|
- params := []interface{}{appName, date, beginTime, endTime}
|
|
|
|
|
-
|
|
|
|
|
- cqlformat := `select app_name, req_date, req_time, login_id, req_method, req_url, req_proto, req_ua, req_referer, req_post_data, resp_time, resp_body, resp_code, resp_msg, resp_data, cost_time
|
|
|
|
|
- from log_info where app_name = ? and req_date = ? and req_time >= ? and req_time <= ?
|
|
|
|
|
- `
|
|
|
|
|
- if loginId != "" {
|
|
|
|
|
- cqlformat += " and login_id = ?"
|
|
|
|
|
- params = append(params, loginId)
|
|
|
|
|
- }
|
|
|
|
|
- var appName1 string
|
|
|
|
|
- var reqDate string
|
|
|
|
|
- var reqTime, loginId1, reqMethod, reqUrl, reqProto, reqUa, reqReferer, reqPostData, respTime, respBody, respCode, respMsg, respData string
|
|
|
|
|
- var costTime float64
|
|
|
|
|
-
|
|
|
|
|
- results := make([]map[string]interface{}, 0)
|
|
|
|
|
- iter := session.Query(cqlformat, params...).Iter()
|
|
|
|
|
- for iter.Scan(&appName1, &reqDate, &reqTime, &loginId1, &reqMethod, &reqUrl, &reqProto, &reqUa, &reqReferer, &reqPostData, &respTime, &respBody, &respCode, &respMsg, &respData, &costTime) {
|
|
|
|
|
- result := make(map[string]interface{})
|
|
|
|
|
- result["app_name"] = appName1
|
|
|
|
|
- result["req_date"] = reqDate
|
|
|
|
|
- result["req_time"] = reqTime
|
|
|
|
|
- result["login_id"] = loginId1
|
|
|
|
|
- result["req_method"] = reqMethod
|
|
|
|
|
- result["req_url"] = reqUrl
|
|
|
|
|
- result["req_proto"] = reqProto
|
|
|
|
|
- result["req_ua"] = reqUa
|
|
|
|
|
- result["req_referer"] = reqReferer
|
|
|
|
|
- result["req_post_data"] = reqPostData
|
|
|
|
|
- result["resp_time"] = respTime
|
|
|
|
|
- result["resp_body"] = respBody
|
|
|
|
|
- result["resp_code"] = respCode
|
|
|
|
|
- result["resp_msg"] = respMsg
|
|
|
|
|
- result["resp_data"] = respData
|
|
|
|
|
- result["cost_time"] = costTime
|
|
|
|
|
- results = append(results, result)
|
|
|
|
|
- }
|
|
|
|
|
- if err := iter.Close(); err != nil {
|
|
|
|
|
- glog.Errorln("iter close err", err.Error())
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return results, nil
|
|
|
|
|
-}
|
|
|