From d1a2afa67032339c2eb1019a02c6b6d036c0bdb1 Mon Sep 17 00:00:00 2001 From: hutongqing <hutongqing@hnkhzn.com> Date: 星期一, 23 九月 2024 09:09:40 +0800 Subject: [PATCH] 1 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs | 144 ++++++++++++++++++++++++++++-------------------- 1 files changed, 84 insertions(+), 60 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs" index ee5aea4..ee5bdd9 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Middlewares/ApiLogMiddleware.cs" @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using WIDESEA_Core.Helper; using WIDESEA_Core.LogHelper; @@ -20,94 +21,117 @@ /// /// </summary> private readonly RequestDelegate _next; - private readonly ILogger<ApiLogMiddleware> _logger; - public ApiLogMiddleware(RequestDelegate next, ILogger<ApiLogMiddleware> logger) + public ApiLogMiddleware(RequestDelegate next) { _next = next; - _logger = logger; } //todo public async Task InvokeAsync(HttpContext context) { - //if (AppSettings.app("Middleware", "RequestResponseLog", "Enabled").ObjToBool()) + // 杩囨护锛屽彧鏈夋帴鍙� + if (context.Request.Path.Value?.Contains("api") ?? false) { - // 杩囨护锛屽彧鏈夋帴鍙� - if (context.Request.Path.Value.Contains("api")) - { - context.Request.EnableBuffering(); - //Stream originalBody = context.Response.Body; + context.Request.EnableBuffering(); + Stream originalBody = context.Response.Body; + try + { try { // 瀛樺偍璇锋眰鏁版嵁 - //string requestParam = GetRequestData(context); - //DateTime beginDate = DateTime.Now; + await RequestDataLog(context); + context.Request.Body.Position = 0; + } + catch { } + using MemoryStream ms = new(); + context.Response.Body = ms; - //using var ms = new MemoryStream(); - //context.Response.Body = ms; + await _next(context); - await _next(context); - + try + { // 瀛樺偍鍝嶅簲鏁版嵁 - //DateTime endDate = DateTime.Now; - //string responseParam = GetResponsetData(context); + ResponseDataLog(context.Response, ms); + } + catch { } - //context.Response.Body.Position = 0; - //await context.Response.Body.CopyToAsync(originalBody); + ms.Position = 0; + await ms.CopyToAsync(originalBody); - //Logger.WriteApiLog2DB(context,requestParam, beginDate, responseParam, endDate, context.Response.StatusCode == 200 ? LoggerStatus.Success : LoggerStatus.Error); - } - catch (Exception ex) - { - // 璁板綍寮傚父 - _logger.LogError(ex.Message + "" + ex.InnerException); - } - finally - { - //context.Response.Body = originalBody; - } } - //else - //{ - // await _next(context); - //} + catch (Exception ex) + { + // 璁板綍寮傚父 + + } + finally + { + context.Response.Body = originalBody; + } } - //else - //{ - // await _next(context); - //} - } - - private string GetRequestData(HttpContext context) - { - try + else { - using StreamReader sr = new StreamReader(context.Request.Body); - string request = JsonConvert.SerializeObject(sr.ReadToEnd()); ; - context.Request.Body.Position = 0; - return request; - } - catch (Exception ex) - { - return $"璇锋眰鍙傛暟鑾峰彇閿欒,{ex.Message}"; + await _next(context); } } - private string GetResponsetData(HttpContext context) + + private async Task RequestDataLog(HttpContext context) { - try + var request = context.Request; + var sr = new StreamReader(request.Body); + //long length = request.Body.Length; + RequestLogInfo requestResponse = new RequestLogInfo() { - using StreamReader sr = new StreamReader(context.Response.Body); - string response = JsonConvert.SerializeObject(sr.ReadToEnd()); ; - context.Response.Body.Position = 0; - return response; - } - catch (Exception ex) + Path = request.Path, + QueryString = request.QueryString.ToString(), + BodyData = await sr.ReadToEndAsync() + }; + var content = JsonConvert.SerializeObject(requestResponse); + if (!string.IsNullOrEmpty(content)) { - return $"鍝嶅簲鍙傛暟鑾峰彇閿欒,{ex.Message}"; + LogLock.OutLogAOP("鎺ュ彛鏃ュ織", new string[] { "璇锋眰鏁版嵁 - 璇锋眰鏁版嵁绫诲瀷:" + requestResponse.GetType().ToString(), content }); + request.Body.Position = 0; } } + + private void ResponseDataLog(HttpResponse response, MemoryStream ms) + { + 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 }); + + }); + } + } + } + + 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; } } } -- Gitblit v1.9.3