| | |
| | | /// </summary> |
| | | private readonly RequestDelegate _next; |
| | | |
| | | public ApiLogMiddleware(RequestDelegate next) |
| | | public ApiLogMiddleware(RequestDelegate next, ILogger<ApiLogMiddleware> logger) |
| | | { |
| | | _next = next; |
| | | } |
| | |
| | | { |
| | | context.Request.EnableBuffering(); |
| | | Stream originalBody = context.Response.Body; |
| | | |
| | | string requestParam = string.Empty; |
| | | string responseParam = string.Empty; |
| | | try |
| | | { |
| | | (context.RequestServices.GetService(typeof(RequestLogModel)) as RequestLogModel).RequestDate = DateTime.Now; |
| | | try |
| | | { |
| | | // 瀛樺偍璇锋眰鏁版嵁 |
| | | await RequestDataLog(context); |
| | | requestParam = RequestDataLog(context); |
| | | context.Request.Body.Position = 0; |
| | | } |
| | | catch { } |
| | |
| | | try |
| | | { |
| | | // 瀛樺偍鍝嶅簲鏁版嵁 |
| | | ResponseDataLog(context.Response, ms); |
| | | responseParam = ResponseDataLog(context.Response); |
| | | } |
| | | catch { } |
| | | |
| | | ms.Position = 0; |
| | | await ms.CopyToAsync(originalBody); |
| | | |
| | | if (!((context.Request.Path.Value?.Contains("get")) ?? true) && !((context.Request.Path.Value?.Contains("Get")) ?? true) && !((context.Request.Path.Value?.Contains("query")) ?? true) && !((context.Request.Path.Value?.Contains("Query")) ?? true)) |
| | | Logger.Add(requestParam, responseParam); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // 璁板綍寮傚父 |
| | | |
| | | |
| | | } |
| | | finally |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | private async Task RequestDataLog(HttpContext context) |
| | | private string RequestDataLog(HttpContext context) |
| | | { |
| | | var request = context.Request; |
| | | var sr = new StreamReader(request.Body); |
| | | //long length = request.Body.Length; |
| | | RequestLogInfo requestResponse = new RequestLogInfo() |
| | | |
| | | object obj = new |
| | | { |
| | | Path = request.Path, |
| | | QueryString = request.QueryString.ToString(), |
| | | BodyData = await sr.ReadToEndAsync() |
| | | BodyData = sr.ReadToEndAsync().Result |
| | | }; |
| | | var content = JsonConvert.SerializeObject(requestResponse); |
| | | if (!string.IsNullOrEmpty(content)) |
| | | { |
| | | LogLock.OutLogAOP("鎺ュ彛鏃ュ織", new string[] { "璇锋眰鏁版嵁 - 璇锋眰鏁版嵁绫诲瀷:" + requestResponse.GetType().ToString(), content }); |
| | | request.Body.Position = 0; |
| | | } |
| | | |
| | | string data = JsonConvert.SerializeObject(obj); |
| | | |
| | | request.Body.Position = 0; |
| | | |
| | | return data; |
| | | } |
| | | |
| | | private void ResponseDataLog(HttpResponse response, MemoryStream ms) |
| | | private string ResponseDataLog(HttpResponse response) |
| | | { |
| | | ms.Position = 0; |
| | | var responseBody = new StreamReader(ms).ReadToEnd(); |
| | | |
| | | // 鍘婚櫎 Html |
| | | var reg = "<[^>]+>"; |
| | | var isHtml = Regex.IsMatch(responseBody, reg); |
| | | |
| | | if (!string.IsNullOrEmpty(responseBody)) |
| | | { |
| | | Parallel.For(0, 1, e => |
| | | { |
| | | LogLock.OutLogAOP("鎺ュ彛鏃ュ織", new string[] { "鍝嶅簲鏁版嵁 - 鍝嶅簲鏁版嵁绫诲瀷:" + responseBody.GetType().ToString(), responseBody }); |
| | | |
| | | }); |
| | | } |
| | | response.Body.Position = 0; |
| | | using StreamReader stream = new StreamReader(response.Body, leaveOpen: true); |
| | | string body = stream.ReadToEnd(); |
| | | response.Body.Position = 0; |
| | | return body; |
| | | } |
| | | } |
| | | |
| | | public class RequestLogInfo |
| | | { |
| | | /// <summary> |
| | | /// 璇锋眰鍦板潃 |
| | | /// </summary> |
| | | public string Path { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 璇锋眰鍙傛暟 |
| | | /// </summary> |
| | | public string QueryString { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Body鍙傛暟 |
| | | /// </summary> |
| | | public string BodyData { get; set; } |
| | | } |
| | | } |