You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
4.8 KiB
126 lines
4.8 KiB
package golog
|
|
|
|
import (
|
|
"context"
|
|
"go.dtapp.net/gojson"
|
|
"go.dtapp.net/gorequest"
|
|
"go.dtapp.net/gotrace_id"
|
|
"go.dtapp.net/gourl"
|
|
"time"
|
|
)
|
|
|
|
// 结构体
|
|
type apiSLog 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"`
|
|
RequestParams map[string]interface{} `json:"request_params,omitempty"`
|
|
RequestHeader map[string]string `json:"request_header,omitempty"`
|
|
ResponseHeader map[string][]string `json:"response_header,omitempty"`
|
|
ResponseStatusCode int `json:"response_status_code,omitempty"`
|
|
ResponseBody map[string]interface{} `json:"response_body,omitempty"`
|
|
ResponseTime time.Time `json:"response_time,omitempty,omitempty"`
|
|
}
|
|
|
|
// Middleware 中间件
|
|
func (al *ApiSLog) Middleware(ctx context.Context, request gorequest.Response) {
|
|
data := apiSLog{
|
|
TraceID: gotrace_id.GetTraceIdContext(ctx),
|
|
RequestTime: request.RequestTime,
|
|
RequestUri: request.RequestUri,
|
|
RequestUrl: gourl.UriParse(request.RequestUri).Url,
|
|
RequestApi: gourl.UriParse(request.RequestUri).Path,
|
|
RequestMethod: request.RequestMethod,
|
|
RequestParams: request.RequestParams,
|
|
RequestHeader: request.RequestHeader,
|
|
ResponseHeader: request.ResponseHeader,
|
|
ResponseStatusCode: request.ResponseStatusCode,
|
|
ResponseBody: gojson.JsonDecodeNoError(string(request.ResponseBody)),
|
|
ResponseTime: request.ResponseTime,
|
|
}
|
|
if al.slog.status {
|
|
al.slog.client.WithTraceId(ctx).Info("Middleware",
|
|
"request_time", data.RequestTime,
|
|
"request_uri", data.RequestUri,
|
|
"request_url", data.RequestUrl,
|
|
"request_api", data.RequestApi,
|
|
"request_method", data.RequestMethod,
|
|
"request_params", data.RequestParams,
|
|
"request_header", data.RequestHeader,
|
|
"response_header", data.ResponseHeader,
|
|
"response_status_code", data.ResponseStatusCode,
|
|
"response_body", data.ResponseBody,
|
|
"response_time", data.ResponseTime,
|
|
)
|
|
}
|
|
}
|
|
|
|
// MiddlewareXml 中间件
|
|
func (al *ApiSLog) MiddlewareXml(ctx context.Context, request gorequest.Response) {
|
|
data := apiSLog{
|
|
TraceID: gotrace_id.GetTraceIdContext(ctx),
|
|
RequestTime: request.RequestTime,
|
|
RequestUri: request.RequestUri,
|
|
RequestUrl: gourl.UriParse(request.RequestUri).Url,
|
|
RequestApi: gourl.UriParse(request.RequestUri).Path,
|
|
RequestMethod: request.RequestMethod,
|
|
RequestParams: request.RequestParams,
|
|
RequestHeader: request.RequestHeader,
|
|
ResponseHeader: request.ResponseHeader,
|
|
ResponseStatusCode: request.ResponseStatusCode,
|
|
ResponseBody: gojson.XmlDecodeNoError(request.ResponseBody),
|
|
ResponseTime: request.ResponseTime,
|
|
}
|
|
if al.slog.status {
|
|
al.slog.client.WithTraceId(ctx).Info("MiddlewareXml",
|
|
"request_time", data.RequestTime,
|
|
"request_uri", data.RequestUri,
|
|
"request_url", data.RequestUrl,
|
|
"request_api", data.RequestApi,
|
|
"request_method", data.RequestMethod,
|
|
"request_params", data.RequestParams,
|
|
"request_header", data.RequestHeader,
|
|
"response_header", data.ResponseHeader,
|
|
"response_status_code", data.ResponseStatusCode,
|
|
"response_body", data.ResponseBody,
|
|
"response_time", data.ResponseTime,
|
|
)
|
|
}
|
|
}
|
|
|
|
// MiddlewareCustom 中间件
|
|
func (al *ApiSLog) MiddlewareCustom(ctx context.Context, api string, request gorequest.Response) {
|
|
data := apiSLog{
|
|
TraceID: gotrace_id.GetTraceIdContext(ctx),
|
|
RequestTime: request.RequestTime,
|
|
RequestUri: request.RequestUri,
|
|
RequestUrl: gourl.UriParse(request.RequestUri).Url,
|
|
RequestApi: api,
|
|
RequestMethod: request.RequestMethod,
|
|
RequestParams: request.RequestParams,
|
|
RequestHeader: request.RequestHeader,
|
|
ResponseHeader: request.ResponseHeader,
|
|
ResponseStatusCode: request.ResponseStatusCode,
|
|
ResponseBody: gojson.JsonDecodeNoError(string(request.ResponseBody)),
|
|
ResponseTime: request.ResponseTime,
|
|
}
|
|
if al.slog.status {
|
|
al.slog.client.WithTraceId(ctx).Info("MiddlewareCustom",
|
|
"request_time", data.RequestTime,
|
|
"request_uri", data.RequestUri,
|
|
"request_url", data.RequestUrl,
|
|
"request_api", data.RequestApi,
|
|
"request_method", data.RequestMethod,
|
|
"request_params", data.RequestParams,
|
|
"request_header", data.RequestHeader,
|
|
"response_header", data.ResponseHeader,
|
|
"response_status_code", data.ResponseStatusCode,
|
|
"response_body", data.ResponseBody,
|
|
"response_time", data.ResponseTime,
|
|
)
|
|
}
|
|
}
|