From 7b6e0fc4dcfdb7998424daf3cd5576211df8f50a Mon Sep 17 00:00:00 2001 From: dtapps Date: Wed, 3 Jan 2024 15:44:41 +0800 Subject: [PATCH] - optimization gorm --- README.md | 2 +- api_gorm_record.go | 116 ++++++++++++++++++++++----------------------- gin_gorm.go | 14 ++---- gin_gorm_record.go | 91 ++++++++++++++++------------------- gin_slog.go | 14 ++---- gin_slog_record.go | 71 ++++++++++++--------------- go.mod | 4 +- go.sum | 17 ++----- version.go | 2 +- 9 files changed, 144 insertions(+), 187 deletions(-) diff --git a/README.md b/README.md index 88d188a..f4af4da 100644 --- a/README.md +++ b/README.md @@ -13,5 +13,5 @@ #### 安装 ```shell -go get -v -u go.dtapp.net/golog@v1.0.108 +go get -v -u go.dtapp.net/golog@v1.0.109 ``` diff --git a/api_gorm_record.go b/api_gorm_record.go index e3e2bba..aaa4e2d 100644 --- a/api_gorm_record.go +++ b/api_gorm_record.go @@ -12,28 +12,27 @@ import ( ) // 模型 -type apiPostgresqlLog struct { - LogID int64 `gorm:"primaryKey;comment:【记录】编号" json:"log_id,omitempty"` //【记录】编号 - TraceID string `gorm:"index;comment:【系统】跟踪编号" json:"trace_id,omitempty"` //【系统】跟踪编号 - RequestTime time.Time `gorm:"index;comment:【请求】时间" json:"request_time,omitempty"` //【请求】时间 - RequestUri string `gorm:"comment:【请求】链接" json:"request_uri,omitempty"` //【请求】链接 - RequestUrl string `gorm:"comment:【请求】链接" json:"request_url,omitempty"` //【请求】链接 - RequestApi string `gorm:"index;comment:【请求】接口" json:"request_api,omitempty"` //【请求】接口 - RequestMethod string `gorm:"index;comment:【请求】方式" json:"request_method,omitempty"` //【请求】方式 - RequestParams string `gorm:"comment:【请求】参数" json:"request_params,omitempty"` //【请求】参数 - RequestHeader string `gorm:"comment:【请求】头部" json:"request_header,omitempty"` //【请求】头部 - RequestIp string `gorm:"default:0.0.0.0;index;comment:【请求】请求Ip" json:"request_ip,omitempty"` //【请求】请求Ip - ResponseHeader string `gorm:"comment:【返回】头部" json:"response_header,omitempty"` //【返回】头部 - ResponseStatusCode int `gorm:"index;comment:【返回】状态码" json:"response_status_code,omitempty"` //【返回】状态码 - ResponseBody string `gorm:"comment:【返回】数据" json:"response_body,omitempty"` //【返回】数据 - ResponseContentLength int64 `gorm:"comment:【返回】大小" json:"response_content_length,omitempty"` //【返回】大小 - ResponseTime time.Time `gorm:"index;comment:【返回】时间" json:"response_time,omitempty"` //【返回】时间 - SystemHostName string `gorm:"index;comment:【系统】主机名" json:"system_host_name,omitempty"` //【系统】主机名 - SystemInsideIp string `gorm:"default:0.0.0.0;comment:【系统】内网ip" json:"system_inside_ip,omitempty"` //【系统】内网ip - SystemOs string `gorm:"index;comment:【系统】系统类型" json:"system_os,omitempty"` //【系统】系统类型 - SystemArch string `gorm:"index;comment:【系统】系统架构" json:"system_arch,omitempty"` //【系统】系统架构 - GoVersion string `gorm:"comment:【程序】Go版本" json:"go_version,omitempty"` //【程序】Go版本 - SdkVersion string `gorm:"comment:【程序】Sdk版本" json:"sdk_version,omitempty"` //【程序】Sdk版本 +type apiGormLog struct { + LogID int64 `gorm:"primaryKey;comment:【记录】编号" json:"log_id,omitempty"` //【记录】编号 + TraceID string `gorm:"index;comment:【系统】跟踪编号" json:"trace_id,omitempty"` //【系统】跟踪编号 + RequestTime time.Time `gorm:"index;comment:【请求】时间" json:"request_time,omitempty"` //【请求】时间 + RequestUri string `gorm:"comment:【请求】链接" json:"request_uri,omitempty"` //【请求】链接 + RequestUrl string `gorm:"comment:【请求】链接" json:"request_url,omitempty"` //【请求】链接 + RequestApi string `gorm:"index;comment:【请求】接口" json:"request_api,omitempty"` //【请求】接口 + RequestMethod string `gorm:"index;comment:【请求】方式" json:"request_method,omitempty"` //【请求】方式 + RequestParams string `gorm:"comment:【请求】参数" json:"request_params,omitempty"` //【请求】参数 + RequestHeader string `gorm:"comment:【请求】头部" json:"request_header,omitempty"` //【请求】头部 + RequestIp string `gorm:"default:0.0.0.0;index;comment:【请求】请求Ip" json:"request_ip,omitempty"` //【请求】请求Ip + ResponseHeader string `gorm:"comment:【返回】头部" json:"response_header,omitempty"` //【返回】头部 + ResponseStatusCode int `gorm:"index;comment:【返回】状态码" json:"response_status_code,omitempty"` //【返回】状态码 + ResponseBody string `gorm:"comment:【返回】数据" json:"response_body,omitempty"` //【返回】数据 + ResponseTime time.Time `gorm:"index;comment:【返回】时间" json:"response_time,omitempty"` //【返回】时间 + SystemHostName string `gorm:"index;comment:【系统】主机名" json:"system_host_name,omitempty"` //【系统】主机名 + SystemInsideIp string `gorm:"default:0.0.0.0;comment:【系统】内网ip" json:"system_inside_ip,omitempty"` //【系统】内网ip + SystemOs string `gorm:"index;comment:【系统】系统类型" json:"system_os,omitempty"` //【系统】系统类型 + SystemArch string `gorm:"index;comment:【系统】系统架构" json:"system_arch,omitempty"` //【系统】系统架构 + GoVersion string `gorm:"comment:【程序】Go版本" json:"go_version,omitempty"` //【程序】Go版本 + SdkVersion string `gorm:"comment:【程序】Sdk版本" json:"sdk_version,omitempty"` //【程序】Sdk版本 } // 创建模型 @@ -42,14 +41,14 @@ func (ag *ApiGorm) gormAutoMigrate(ctx context.Context) { return } - err := ag.gormClient.Table(ag.gormConfig.tableName).AutoMigrate(&apiPostgresqlLog{}) + err := ag.gormClient.Table(ag.gormConfig.tableName).AutoMigrate(&apiGormLog{}) if err != nil { log.Printf("创建模型:%s", err) } } // 记录日志 -func (ag *ApiGorm) gormRecord(ctx context.Context, data apiPostgresqlLog) { +func (ag *ApiGorm) gormRecord(ctx context.Context, data apiGormLog) { if ag.gormConfig.stats == false { return } @@ -76,18 +75,17 @@ func (ag *ApiGorm) gormRecord(ctx context.Context, data apiPostgresqlLog) { // 中间件 func (ag *ApiGorm) gormMiddleware(ctx context.Context, request gorequest.Response) { - data := apiPostgresqlLog{ - RequestTime: request.RequestTime, //【请求】时间 - RequestUri: request.RequestUri, //【请求】链接 - RequestUrl: gourl.UriParse(request.RequestUri).Url, //【请求】链接 - RequestApi: gourl.UriParse(request.RequestUri).Path, //【请求】接口 - RequestMethod: request.RequestMethod, //【请求】方式 - RequestParams: gojson.JsonEncodeNoError(request.RequestParams), //【请求】参数 - RequestHeader: gojson.JsonEncodeNoError(request.RequestHeader), //【请求】头部 - ResponseHeader: gojson.JsonEncodeNoError(request.ResponseHeader), //【返回】头部 - ResponseStatusCode: request.ResponseStatusCode, //【返回】状态码 - ResponseContentLength: request.ResponseContentLength, //【返回】大小 - ResponseTime: request.ResponseTime, //【返回】时间 + data := apiGormLog{ + RequestTime: request.RequestTime, //【请求】时间 + RequestUri: request.RequestUri, //【请求】链接 + RequestUrl: gourl.UriParse(request.RequestUri).Url, //【请求】链接 + RequestApi: gourl.UriParse(request.RequestUri).Path, //【请求】接口 + RequestMethod: request.RequestMethod, //【请求】方式 + RequestParams: gojson.JsonEncodeNoError(request.RequestParams), //【请求】参数 + RequestHeader: gojson.JsonEncodeNoError(request.RequestHeader), //【请求】头部 + ResponseHeader: gojson.JsonEncodeNoError(request.ResponseHeader), //【返回】头部 + ResponseStatusCode: request.ResponseStatusCode, //【返回】状态码 + ResponseTime: request.ResponseTime, //【返回】时间 } if !request.HeaderIsImg() { if len(request.ResponseBody) > 0 { @@ -100,18 +98,17 @@ func (ag *ApiGorm) gormMiddleware(ctx context.Context, request gorequest.Respons // 中间件 func (ag *ApiGorm) gormMiddlewareXml(ctx context.Context, request gorequest.Response) { - data := apiPostgresqlLog{ - RequestTime: request.RequestTime, //【请求】时间 - RequestUri: request.RequestUri, //【请求】链接 - RequestUrl: gourl.UriParse(request.RequestUri).Url, //【请求】链接 - RequestApi: gourl.UriParse(request.RequestUri).Path, //【请求】接口 - RequestMethod: request.RequestMethod, //【请求】方式 - RequestParams: gojson.JsonEncodeNoError(request.RequestParams), //【请求】参数 - RequestHeader: gojson.JsonEncodeNoError(request.RequestHeader), //【请求】头部 - ResponseHeader: gojson.JsonEncodeNoError(request.ResponseHeader), //【返回】头部 - ResponseStatusCode: request.ResponseStatusCode, //【返回】状态码 - ResponseContentLength: request.ResponseContentLength, //【返回】大小 - ResponseTime: request.ResponseTime, //【返回】时间 + data := apiGormLog{ + RequestTime: request.RequestTime, //【请求】时间 + RequestUri: request.RequestUri, //【请求】链接 + RequestUrl: gourl.UriParse(request.RequestUri).Url, //【请求】链接 + RequestApi: gourl.UriParse(request.RequestUri).Path, //【请求】接口 + RequestMethod: request.RequestMethod, //【请求】方式 + RequestParams: gojson.JsonEncodeNoError(request.RequestParams), //【请求】参数 + RequestHeader: gojson.JsonEncodeNoError(request.RequestHeader), //【请求】头部 + ResponseHeader: gojson.JsonEncodeNoError(request.ResponseHeader), //【返回】头部 + ResponseStatusCode: request.ResponseStatusCode, //【返回】状态码 + ResponseTime: request.ResponseTime, //【返回】时间 } if !request.HeaderIsImg() { if len(request.ResponseBody) > 0 { @@ -124,18 +121,17 @@ func (ag *ApiGorm) gormMiddlewareXml(ctx context.Context, request gorequest.Resp // 中间件 func (ag *ApiGorm) gormMiddlewareCustom(ctx context.Context, api string, request gorequest.Response) { - data := apiPostgresqlLog{ - RequestTime: request.RequestTime, //【请求】时间 - RequestUri: request.RequestUri, //【请求】链接 - RequestUrl: gourl.UriParse(request.RequestUri).Url, //【请求】链接 - RequestApi: api, //【请求】接口 - RequestMethod: request.RequestMethod, //【请求】方式 - RequestParams: gojson.JsonEncodeNoError(request.RequestParams), //【请求】参数 - RequestHeader: gojson.JsonEncodeNoError(request.RequestHeader), //【请求】头部 - ResponseHeader: gojson.JsonEncodeNoError(request.ResponseHeader), //【返回】头部 - ResponseStatusCode: request.ResponseStatusCode, //【返回】状态码 - ResponseContentLength: request.ResponseContentLength, //【返回】大小 - ResponseTime: request.ResponseTime, //【返回】时间 + data := apiGormLog{ + RequestTime: request.RequestTime, //【请求】时间 + RequestUri: request.RequestUri, //【请求】链接 + RequestUrl: gourl.UriParse(request.RequestUri).Url, //【请求】链接 + RequestApi: api, //【请求】接口 + RequestMethod: request.RequestMethod, //【请求】方式 + RequestParams: gojson.JsonEncodeNoError(request.RequestParams), //【请求】参数 + RequestHeader: gojson.JsonEncodeNoError(request.RequestHeader), //【请求】头部 + ResponseHeader: gojson.JsonEncodeNoError(request.ResponseHeader), //【返回】头部 + ResponseStatusCode: request.ResponseStatusCode, //【返回】状态码 + ResponseTime: request.ResponseTime, //【返回】时间 } if !request.HeaderIsImg() { if len(request.ResponseBody) > 0 { diff --git a/gin_gorm.go b/gin_gorm.go index 4870ad9..65f7652 100644 --- a/gin_gorm.go +++ b/gin_gorm.go @@ -8,7 +8,6 @@ import ( "go.dtapp.net/gojson" "go.dtapp.net/gorequest" "go.dtapp.net/gotime" - "go.dtapp.net/gotrace_id" "gorm.io/gorm" "io/ioutil" ) @@ -101,11 +100,11 @@ func (gg *GinGorm) Middleware() gin.HandlerFunc { requestTime := gotime.Current().Time // 获取全部内容 - paramsBody := gorequest.NewParams() + requestBody := gorequest.NewParams() queryParams := ginCtx.Request.URL.Query() // 请求URL参数 for key, values := range queryParams { for _, value := range values { - paramsBody.Set(key, value) + requestBody.Set(key, value) } } var dataMap map[string]interface{} @@ -116,7 +115,7 @@ func (gg *GinGorm) Middleware() gin.HandlerFunc { dataMap = gojson.ParseQueryString(string(rawData)) } for key, value := range dataMap { - paramsBody.Set(key, value) + requestBody.Set(key, value) } // 重新赋值 @@ -134,15 +133,12 @@ func (gg *GinGorm) Middleware() gin.HandlerFunc { // 结束时间 endTime := gotime.Current().TimestampWithMillisecond() + responseTime := gotime.Current().Time go func() { - requestIp := gorequest.ClientIp(ginCtx.Request) - - var traceId = gotrace_id.GetGinTraceId(ginCtx) - // 记录 - gg.recordJson(ginCtx, traceId, requestTime, paramsBody, responseCode, responseBody, startTime, endTime, requestIp) + gg.recordJson(ginCtx, requestTime, requestBody, responseTime, responseCode, responseBody, endTime-startTime, gorequest.ClientIp(ginCtx.Request)) }() } diff --git a/gin_gorm_record.go b/gin_gorm_record.go index 314c481..b259360 100644 --- a/gin_gorm_record.go +++ b/gin_gorm_record.go @@ -5,39 +5,35 @@ import ( "github.com/gin-gonic/gin" "go.dtapp.net/gojson" "go.dtapp.net/gorequest" - "go.dtapp.net/gotime" + "go.dtapp.net/gotrace_id" "go.dtapp.net/gourl" "log" "time" ) // 模型 -type ginPostgresqlLog struct { - LogID int64 `gorm:"primaryKey;comment:【记录】编号" json:"log_id,omitempty"` //【记录】编号 - TraceID string `gorm:"index;comment:【系统】跟踪编号" json:"trace_id,omitempty"` //【系统】跟踪编号 - RequestTime time.Time `gorm:"index;comment:【请求】时间" json:"request_time,omitempty"` //【请求】时间 - RequestUri string `gorm:"comment:【请求】请求链接 域名+路径+参数" json:"request_uri,omitempty"` //【请求】请求链接 域名+路径+参数 - RequestURL string `gorm:"comment:【请求】请求链接 域名+路径" json:"request_url,omitempty"` //【请求】请求链接 域名+路径 - RequestApi string `gorm:"index;comment:【请求】请求接口 路径" json:"request_api,omitempty"` //【请求】请求接口 路径 - RequestMethod string `gorm:"index;comment:【请求】请求方式" json:"request_method,omitempty"` //【请求】请求方式 - RequestProto string `gorm:"comment:【请求】请求协议" json:"request_proto,omitempty"` //【请求】请求协议 - RequestUa string `gorm:"comment:【请求】请求UA" json:"request_ua,omitempty"` //【请求】请求UA - RequestReferer string `gorm:"comment:【请求】请求referer" json:"request_referer,omitempty"` //【请求】请求referer - RequestBody string `gorm:"comment:【请求】请求主体" json:"request_body,omitempty"` //【请求】请求主体 - RequestUrlQuery string `gorm:"comment:【请求】请求URL参数" json:"request_url_query,omitempty"` //【请求】请求URL参数 - RequestIP string `gorm:"index;comment:【请求】请求客户端IP" json:"request_ip,omitempty"` //【请求】请求客户端IP - RequestHeader string `gorm:"comment:【请求】请求头" json:"request_header,omitempty"` //【请求】请求头 - ResponseTime time.Time `gorm:"index;comment:【返回】时间" json:"response_time,omitempty"` //【返回】时间 - ResponseCode int `gorm:"index;comment:【返回】状态码" json:"response_code,omitempty"` //【返回】状态码 - ResponseMsg string `gorm:"comment:【返回】描述" json:"response_msg,omitempty"` //【返回】描述 - ResponseData string `gorm:"comment:【返回】数据" json:"response_data,omitempty"` //【返回】数据 - CostTime int64 `gorm:"comment:【系统】花费时间" json:"cost_time,omitempty"` //【系统】花费时间 - SystemHostName string `gorm:"index;comment:【系统】主机名" json:"system_host_name,omitempty"` //【系统】主机名 - SystemInsideIP string `gorm:"comment:【系统】内网ip" json:"system_inside_ip,omitempty"` //【系统】内网ip - SystemOs string `gorm:"index;comment:【系统】系统类型" json:"system_os,omitempty"` //【系统】系统类型 - SystemArch string `gorm:"index;comment:【系统】系统架构" json:"system_arch,omitempty"` //【系统】系统架构 - GoVersion string `gorm:"comment:【程序】Go版本" json:"go_version,omitempty"` //【程序】Go版本 - SdkVersion string `gorm:"comment:【程序】Sdk版本" json:"sdk_version,omitempty"` //【程序】Sdk版本 +type ginGormLog struct { + LogID int64 `gorm:"primaryKey;comment:【记录】编号" json:"log_id,omitempty"` //【记录】编号 + TraceID string `gorm:"index;comment:【系统】跟踪编号" json:"trace_id,omitempty"` //【系统】跟踪编号 + RequestTime time.Time `gorm:"index;comment:【请求】时间" json:"request_time,omitempty"` //【请求】时间 + RequestUri string `gorm:"comment:【请求】链接 域名+路径+参数" json:"request_uri,omitempty"` //【请求】链接 域名+路径+参数 + RequestURL string `gorm:"comment:【请求】链接 域名+路径" json:"request_url,omitempty"` //【请求】链接 域名+路径 + RequestApi string `gorm:"index;comment:【请求】接口" json:"request_api,omitempty"` //【请求】接口 + RequestMethod string `gorm:"index;comment:【请求】方式" json:"request_method,omitempty"` //【请求】方式 + RequestProto string `gorm:"comment:【请求】协议" json:"request_proto,omitempty"` //【请求】协议 + RequestBody string `gorm:"comment:【请求】参数" json:"request_body,omitempty"` //【请求】参数 + RequestIP string `gorm:"index;comment:【请求】客户端IP" json:"request_ip,omitempty"` //【请求】客户端IP + RequestHeader string `gorm:"comment:【请求】头部" json:"request_header,omitempty"` //【请求】头部 + ResponseTime time.Time `gorm:"index;comment:【返回】时间" json:"response_time,omitempty"` //【返回】时间 + ResponseCode int `gorm:"index;comment:【返回】状态码" json:"response_code,omitempty"` //【返回】状态码 + ResponseData string `gorm:"comment:【返回】数据" json:"response_data,omitempty"` //【返回】数据 + CostTime int64 `gorm:"comment:【系统】花费时间" json:"cost_time,omitempty"` //【系统】花费时间 + SystemHostName string `gorm:"index;comment:【系统】主机名" json:"system_host_name,omitempty"` //【系统】主机名 + SystemInsideIP string `gorm:"comment:【系统】内网ip" json:"system_inside_ip,omitempty"` //【系统】内网ip + SystemOs string `gorm:"index;comment:【系统】系统类型" json:"system_os,omitempty"` //【系统】系统类型 + SystemArch string `gorm:"index;comment:【系统】系统架构" json:"system_arch,omitempty"` //【系统】系统架构 + GoVersion string `gorm:"comment:【程序】Go版本" json:"go_version,omitempty"` //【程序】Go版本 + SdkVersion string `gorm:"comment:【程序】Sdk版本" json:"sdk_version,omitempty"` //【程序】Sdk版本 } // 创建模型 @@ -46,14 +42,14 @@ func (gg *GinGorm) gormAutoMigrate(ctx context.Context) { return } - err := gg.gormClient.Table(gg.gormConfig.tableName).AutoMigrate(&ginPostgresqlLog{}) + err := gg.gormClient.Table(gg.gormConfig.tableName).AutoMigrate(&ginGormLog{}) if err != nil { log.Printf("创建模型:%s\n", err) } } // gormRecord 记录日志 -func (gg *GinGorm) gormRecord(data ginPostgresqlLog) { +func (gg *GinGorm) gormRecord(data ginGormLog) { if gg.gormConfig.stats == false { return } @@ -72,30 +68,27 @@ func (gg *GinGorm) gormRecord(data ginPostgresqlLog) { } } -func (gg *GinGorm) recordJson(ginCtx *gin.Context, traceId string, requestTime time.Time, requestBody gorequest.Params, responseCode int, responseBody string, startTime, endTime int64, requestIp string) { +func (gg *GinGorm) recordJson(ginCtx *gin.Context, requestTime time.Time, requestBody gorequest.Params, responseTime time.Time, responseCode int, responseBody string, costTime int64, requestIp string) { - data := ginPostgresqlLog{ - TraceID: traceId, //【系统】跟踪编号 - RequestTime: requestTime, //【请求】时间 - RequestURL: ginCtx.Request.RequestURI, //【请求】请求链接 - RequestApi: gourl.UriFilterExcludeQueryString(ginCtx.Request.RequestURI), //【请求】请求接口 - RequestMethod: ginCtx.Request.Method, //【请求】请求方式 - RequestProto: ginCtx.Request.Proto, //【请求】请求协议 - RequestUa: ginCtx.Request.UserAgent(), //【请求】请求UA - RequestReferer: ginCtx.Request.Referer(), //【请求】请求referer - RequestBody: gojson.JsonEncodeNoError(requestBody), //【请求】请求主体 - RequestUrlQuery: gojson.JsonEncodeNoError(ginCtx.Request.URL.Query()), //【请求】请求URL参数 - RequestIP: requestIp, //【请求】请求客户端IP - RequestHeader: gojson.JsonEncodeNoError(ginCtx.Request.Header), //【请求】请求头 - ResponseTime: gotime.Current().Time, //【返回】时间 - ResponseCode: responseCode, //【返回】状态码 - ResponseData: responseBody, //【返回】数据 - CostTime: endTime - startTime, //【系统】花费时间 + data := ginGormLog{ + TraceID: gotrace_id.GetGinTraceId(ginCtx), //【系统】跟踪编号 + RequestTime: requestTime, //【请求】时间 + RequestURL: ginCtx.Request.RequestURI, //【请求】链接 + RequestApi: gourl.UriFilterExcludeQueryString(ginCtx.Request.RequestURI), //【请求】接口 + RequestMethod: ginCtx.Request.Method, //【请求】方式 + RequestProto: ginCtx.Request.Proto, //【请求】协议 + RequestBody: gojson.JsonEncodeNoError(requestBody), //【请求】参数 + RequestIP: requestIp, //【请求】客户端IP + RequestHeader: gojson.JsonEncodeNoError(ginCtx.Request.Header), //【请求】头部 + ResponseTime: responseTime, //【返回】时间 + ResponseCode: responseCode, //【返回】状态码 + ResponseData: responseBody, //【返回】数据 + CostTime: costTime, //【系统】花费时间 } if ginCtx.Request.TLS == nil { - data.RequestUri = "http://" + ginCtx.Request.Host + ginCtx.Request.RequestURI //【请求】请求链接 + data.RequestUri = "http://" + ginCtx.Request.Host + ginCtx.Request.RequestURI //【请求】链接 } else { - data.RequestUri = "https://" + ginCtx.Request.Host + ginCtx.Request.RequestURI //【请求】请求链接 + data.RequestUri = "https://" + ginCtx.Request.Host + ginCtx.Request.RequestURI //【请求】链接 } gg.gormRecord(data) diff --git a/gin_slog.go b/gin_slog.go index 94a3438..bcfc855 100644 --- a/gin_slog.go +++ b/gin_slog.go @@ -7,7 +7,6 @@ import ( "go.dtapp.net/gojson" "go.dtapp.net/gorequest" "go.dtapp.net/gotime" - "go.dtapp.net/gotrace_id" "io/ioutil" ) @@ -57,11 +56,11 @@ func (gl *GinSLog) Middleware() gin.HandlerFunc { requestTime := gotime.Current().Time // 获取全部内容 - paramsBody := gorequest.NewParams() + requestAllContent := gorequest.NewParams() queryParams := ginCtx.Request.URL.Query() // 请求URL参数 for key, values := range queryParams { for _, value := range values { - paramsBody.Set(key, value) + requestAllContent.Set(key, value) } } var dataMap map[string]interface{} @@ -72,7 +71,7 @@ func (gl *GinSLog) Middleware() gin.HandlerFunc { dataMap = gojson.ParseQueryString(string(rawData)) } for key, value := range dataMap { - paramsBody.Set(key, value) + requestAllContent.Set(key, value) } // 重新赋值 @@ -90,15 +89,12 @@ func (gl *GinSLog) Middleware() gin.HandlerFunc { // 结束时间 endTime := gotime.Current().TimestampWithMillisecond() + responseTime := gotime.Current().Time go func() { - requestIp := gorequest.ClientIp(ginCtx.Request) - - var traceId = gotrace_id.GetGinTraceId(ginCtx) - // 记录 - gl.recordJson(ginCtx, traceId, requestTime, paramsBody, responseCode, responseBody, startTime, endTime, requestIp) + gl.recordJson(ginCtx, requestTime, requestAllContent, responseTime, responseCode, responseBody, endTime-startTime, gorequest.ClientIp(ginCtx.Request)) }() } diff --git a/gin_slog_record.go b/gin_slog_record.go index 778310f..6c6d74b 100644 --- a/gin_slog_record.go +++ b/gin_slog_record.go @@ -3,32 +3,27 @@ package golog import ( "github.com/gin-gonic/gin" "go.dtapp.net/gorequest" - "go.dtapp.net/gotime" + "go.dtapp.net/gotrace_id" "go.dtapp.net/gourl" "time" ) // 结构体 type ginSLog struct { - TraceID string `json:"trace_id,omitempty"` //【系统】跟踪编号 - RequestTime time.Time `json:"request_time,omitempty"` //【请求】时间 - RequestUri string `json:"request_uri,omitempty"` //【请求】请求链接 域名+路径+参数 - RequestUrl string `json:"request_url,omitempty"` //【请求】请求链接 域名+路径 - RequestApi string `json:"request_api,omitempty"` //【请求】请求接口 路径 - RequestMethod string `json:"request_method,omitempty"` //【请求】请求方式 - RequestProto string `json:"request_proto,omitempty"` //【请求】请求协议 - RequestUa string `json:"request_ua,omitempty"` //【请求】请求UA - RequestReferer string `json:"request_referer,omitempty"` //【请求】请求referer - RequestBody string `json:"request_body,omitempty"` //【请求】请求主体 - RequestUrlQuery map[string][]string `json:"request_url_query,omitempty"` //【请求】请求URL参数 - RequestIP string `json:"request_ip,omitempty"` //【请求】请求客户端IP - RequestHeader map[string][]string `json:"request_header,omitempty"` //【请求】请求头 - RequestAllContent map[string]interface{} `json:"request_all_content,omitempty"` // 【请求】请求全部内容 - ResponseTime time.Time `json:"response_time,omitempty"` //【返回】时间 - ResponseCode int `json:"response_code,omitempty"` //【返回】状态码 - ResponseMsg string `json:"response_msg,omitempty"` //【返回】描述 - ResponseData string `json:"response_data,omitempty"` //【返回】数据 - CostTime int64 `json:"cost_time,omitempty"` //【系统】花费时间 + TraceID string `json:"trace_id,omitempty"` //【系统】跟踪编号 + RequestTime time.Time `json:"request_time,omitempty"` //【请求】时间 + RequestUri string `json:"request_uri,omitempty"` //【请求】请求链接 域名+路径+参数 + RequestUrl string `json:"request_url,omitempty"` //【请求】请求链接 域名+路径 + RequestApi string `json:"request_api,omitempty"` //【请求】请求接口 路径 + RequestMethod string `json:"request_method,omitempty"` //【请求】请求方式 + RequestProto string `json:"request_proto,omitempty"` //【请求】请求协议 + RequestBody map[string]interface{} `json:"request_body,omitempty"` //【请求】请求参数 + RequestIP string `json:"request_ip,omitempty"` //【请求】请求客户端IP + RequestHeader map[string][]string `json:"request_header,omitempty"` //【请求】请求头 + ResponseTime time.Time `json:"response_time,omitempty"` //【返回】时间 + ResponseCode int `json:"response_code,omitempty"` //【返回】状态码 + ResponseData string `json:"response_data,omitempty"` //【返回】数据 + CostTime int64 `json:"cost_time,omitempty"` //【系统】花费时间 } // record 记录日志 @@ -40,39 +35,31 @@ func (gl *GinSLog) record(msg string, data ginSLog) { "request_api", data.RequestApi, "request_method", data.RequestMethod, "request_proto", data.RequestProto, - "request_ua", data.RequestUa, - "request_referer", data.RequestReferer, "request_body", data.RequestBody, - "request_url_query", data.RequestUrlQuery, "request_ip", data.RequestIP, "request_header", data.RequestHeader, - "request_all_content", data.RequestAllContent, "response_time", data.ResponseTime, "response_code", data.ResponseCode, - "response_msg", data.ResponseMsg, "response_data", data.ResponseData, "cost_time", data.CostTime, ) } -func (gl *GinSLog) recordJson(ginCtx *gin.Context, traceId string, requestTime time.Time, paramsBody gorequest.Params, responseCode int, responseBody string, startTime, endTime int64, requestIp string) { +func (gl *GinSLog) recordJson(ginCtx *gin.Context, requestTime time.Time, request_body gorequest.Params, responseTime time.Time, responseCode int, responseBody string, costTime int64, requestIp string) { data := ginSLog{ - TraceID: traceId, //【系统】跟踪编号 - RequestTime: requestTime, //【请求】时间 - RequestUrl: ginCtx.Request.RequestURI, //【请求】请求链接 - RequestApi: gourl.UriFilterExcludeQueryString(ginCtx.Request.RequestURI), //【请求】请求接口 - RequestMethod: ginCtx.Request.Method, //【请求】请求方式 - RequestProto: ginCtx.Request.Proto, //【请求】请求协议 - RequestUa: ginCtx.Request.UserAgent(), //【请求】请求UA - RequestReferer: ginCtx.Request.Referer(), //【请求】请求referer - RequestUrlQuery: ginCtx.Request.URL.Query(), //【请求】请求URL参数 - RequestIP: requestIp, //【请求】请求客户端IP - RequestHeader: ginCtx.Request.Header, //【请求】请求头 - RequestAllContent: paramsBody, //【请求】请求全部内容 - ResponseTime: gotime.Current().Time, //【返回】时间 - ResponseCode: responseCode, //【返回】状态码 - ResponseData: responseBody, //【返回】数据 - CostTime: endTime - startTime, //【系统】花费时间 + TraceID: gotrace_id.GetGinTraceId(ginCtx), //【系统】跟踪编号 + RequestTime: requestTime, //【请求】时间 + RequestUrl: ginCtx.Request.RequestURI, //【请求】请求链接 + RequestApi: gourl.UriFilterExcludeQueryString(ginCtx.Request.RequestURI), //【请求】请求接口 + RequestMethod: ginCtx.Request.Method, //【请求】请求方式 + RequestProto: ginCtx.Request.Proto, //【请求】请求协议 + RequestBody: request_body, //【请求】请求参数 + RequestIP: requestIp, //【请求】请求客户端IP + RequestHeader: ginCtx.Request.Header, //【请求】请求头 + ResponseTime: responseTime, //【返回】时间 + ResponseCode: responseCode, //【返回】状态码 + ResponseData: responseBody, //【返回】数据 + CostTime: costTime, //【系统】花费时间 } if ginCtx.Request.TLS == nil { data.RequestUri = "http://" + ginCtx.Request.Host + ginCtx.Request.RequestURI //【请求】请求链接 diff --git a/go.mod b/go.mod index 63ca1cc..f7a53d9 100644 --- a/go.mod +++ b/go.mod @@ -32,13 +32,12 @@ require ( github.com/jinzhu/now v1.1.5 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.2.6 // indirect - github.com/kr/pretty v0.3.0 // indirect + github.com/kr/text v0.2.0 // indirect github.com/leodido/go-urn v1.2.4 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pelletier/go-toml/v2 v2.1.1 // indirect - github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/tklauser/go-sysconf v0.3.13 // indirect github.com/tklauser/numcpus v0.7.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect @@ -52,7 +51,6 @@ require ( golang.org/x/sys v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect google.golang.org/protobuf v1.32.0 // indirect - gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index a9c4c8c..0277049 100644 --- a/go.sum +++ b/go.sum @@ -53,12 +53,6 @@ github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa02 github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= @@ -72,13 +66,12 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM= github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/pelletier/go-toml/v2 v2.1.1 h1:LWAJwfNvjQZCFIDKWYQaM62NcYeYViCmWIwmOStowAI= github.com/pelletier/go-toml/v2 v2.1.1/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -134,10 +127,8 @@ golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= diff --git a/version.go b/version.go index eefc4fc..fef8b69 100644 --- a/version.go +++ b/version.go @@ -1,5 +1,5 @@ package golog const ( - Version = "1.0.108" + Version = "1.0.109" )