Browse Source

chore: 移除RequestLogMiddleware

pull/126/head
wangjun 3 years ago
parent
commit
b3c2f1c79b
  1. 13
      templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Middlewares/MyProjectNameApplicationBuilderExtensionsExtensions.cs
  2. 77
      templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Middlewares/RequestLogMiddleware.cs
  3. 13
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Middlewares/MyProjectNameApplicationBuilderExtensionsExtensions.cs
  4. 77
      templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Middlewares/RequestLogMiddleware.cs

13
templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Middlewares/MyProjectNameApplicationBuilderExtensionsExtensions.cs

@ -1,13 +0,0 @@
namespace Microsoft.AspNetCore.Builder;
public static class MyProjectNameApplicationBuilderExtensionsExtensions
{
/// <summary>
/// 记录请求响应日志
/// </summary>
/// <returns></returns>
public static IApplicationBuilder UseRequestLog(this IApplicationBuilder app)
{
return app.UseMiddleware<RequestLogMiddleware>();
}
}

77
templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Middlewares/RequestLogMiddleware.cs

@ -1,77 +0,0 @@
namespace MyCompanyName.MyProjectName.Extensions.Middlewares;
public class RequestLogMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger<RequestLogMiddleware> _logger;
public RequestLogMiddleware(RequestDelegate next,
ILogger<RequestLogMiddleware> logger)
{
_next = next;
_logger = logger;
}
public async Task InvokeAsync(HttpContext context)
{
context.Request.EnableBuffering();
var originalBody = context.Response.Body;
if (context.Request.Path.ToString().ToLower().Contains("swagger")
|| context.Request.Path.ToString().ToLower().Contains("login")
|| context.Request.Path.ToString().ToLower().Contains("monitor")
|| context.Request.Path.ToString().ToLower().Contains("cap")
|| context.Request.Path.ToString().ToLower().Contains("hangfire")
|| context.Request.Path.ToString() == "/"
)
{
await _next(context);
}
else
{
try
{
var logRequestId = Guid.NewGuid().ToString();
await RequestDataLog(context, logRequestId);
using (var ms = new MemoryStream())
{
context.Response.Body = ms;
await _next(context);
ResponseDataLog(ms, logRequestId);
ms.Position = 0;
await ms.CopyToAsync(originalBody);
}
}
catch (Exception ex)
{
// 记录异常
_logger.LogError(ex.Message + "" + ex.InnerException);
}
finally
{
context.Response.Body = originalBody;
}
}
}
private async Task RequestDataLog(HttpContext context,
string requestId)
{
var request = context.Request;
var body = new StreamReader(request.Body);
var requestData = $" 请求路径:{request.Path}\r\n 请求Body参数:{await body.ReadToEndAsync()}";
_logger.LogInformation($"日志中间件[Request],LogRequestId:{requestId}:请求接口信息:{requestData}");
request.Body.Position = 0;
}
private void ResponseDataLog(MemoryStream ms, string requestId)
{
ms.Position = 0;
var responseBody = new StreamReader(ms).ReadToEnd();
// 去除 Html
var isHtml = Regex.IsMatch(responseBody, "<[^>]+>");
if (!isHtml && !string.IsNullOrEmpty(responseBody))
{
_logger.LogInformation($"日志中间件[Response],LogRequestId:{requestId}:响应接口信息:{responseBody}");
}
}
}

13
templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Middlewares/MyProjectNameApplicationBuilderExtensionsExtensions.cs

@ -1,13 +0,0 @@
namespace Microsoft.AspNetCore.Builder;
public static class MyProjectNameApplicationBuilderExtensionsExtensions
{
/// <summary>
/// 记录请求响应日志
/// </summary>
/// <returns></returns>
public static IApplicationBuilder UseRequestLog(this IApplicationBuilder app)
{
return app.UseMiddleware<RequestLogMiddleware>();
}
}

77
templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Middlewares/RequestLogMiddleware.cs

@ -1,77 +0,0 @@
namespace MyCompanyName.MyProjectName.Extensions.Middlewares;
public class RequestLogMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger<RequestLogMiddleware> _logger;
public RequestLogMiddleware(RequestDelegate next,
ILogger<RequestLogMiddleware> logger)
{
_next = next;
_logger = logger;
}
public async Task InvokeAsync(HttpContext context)
{
context.Request.EnableBuffering();
var originalBody = context.Response.Body;
if (context.Request.Path.ToString().ToLower().Contains("swagger")
|| context.Request.Path.ToString().ToLower().Contains("login")
|| context.Request.Path.ToString().ToLower().Contains("monitor")
|| context.Request.Path.ToString().ToLower().Contains("cap")
|| context.Request.Path.ToString().ToLower().Contains("hangfire")
|| context.Request.Path.ToString() == "/"
)
{
await _next(context);
}
else
{
try
{
var logRequestId = Guid.NewGuid().ToString();
await RequestDataLog(context, logRequestId);
using (var ms = new MemoryStream())
{
context.Response.Body = ms;
await _next(context);
ResponseDataLog(ms, logRequestId);
ms.Position = 0;
await ms.CopyToAsync(originalBody);
}
}
catch (Exception ex)
{
// 记录异常
_logger.LogError(ex.Message + "" + ex.InnerException);
}
finally
{
context.Response.Body = originalBody;
}
}
}
private async Task RequestDataLog(HttpContext context,
string requestId)
{
var request = context.Request;
var body = new StreamReader(request.Body);
var requestData = $" 请求路径:{request.Path}\r\n 请求Body参数:{await body.ReadToEndAsync()}";
_logger.LogInformation($"日志中间件[Request],LogRequestId:{requestId}:请求接口信息:{requestData}");
request.Body.Position = 0;
}
private void ResponseDataLog(MemoryStream ms, string requestId)
{
ms.Position = 0;
var responseBody = new StreamReader(ms).ReadToEnd();
// 去除 Html
var isHtml = Regex.IsMatch(responseBody, "<[^>]+>");
if (!isHtml && !string.IsNullOrEmpty(responseBody))
{
_logger.LogInformation($"日志中间件[Response],LogRequestId:{requestId}:响应接口信息:{responseBody}");
}
}
}
Loading…
Cancel
Save