4 changed files with 0 additions and 180 deletions
@ -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>(); |
|||
} |
|||
} |
|||
@ -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}"); |
|||
} |
|||
} |
|||
} |
|||
@ -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>(); |
|||
} |
|||
} |
|||
@ -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…
Reference in new issue