From e94d90fd7d2ec6fcb41fb6aa6fc28e3f9d39ba95 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期二, 19 八月 2025 10:50:16 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.Core/Utils/ResourceUtils/ResourceActionFilter.cs | 83 +++++++++++++++++++++++++---------------- 1 files changed, 50 insertions(+), 33 deletions(-) diff --git a/FlexJobApi.Core/Utils/ResourceUtils/ResourceActionFilter.cs b/FlexJobApi.Core/Utils/ResourceUtils/ResourceActionFilter.cs index 1393015..ef89def 100644 --- a/FlexJobApi.Core/Utils/ResourceUtils/ResourceActionFilter.cs +++ b/FlexJobApi.Core/Utils/ResourceUtils/ResourceActionFilter.cs @@ -11,6 +11,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.IO; using System.Linq; using System.Security.Claims; using System.Text; @@ -22,44 +23,60 @@ { public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { - var resourceLog = new ResourceLog(); - resourceLog.CreatedTime = DateTimeOffset.Now; - var stopwatch = Stopwatch.StartNew(); - var serviceScopeFactory = App.GetService<IServiceScopeFactory>(); - var serviceScope = serviceScopeFactory.CreateScope(); - var rep = serviceScope.ServiceProvider.GetRequiredService<IRepository<ResourceLog, LogDbContextLocator>>(); - var logier = JwtUtils.GetCurrentLogier(); + StringWriter consoleWriter = new(); + TextWriter originalConsoleOut = Console.Out; - resourceLog.Id = IDGen.NextID(); - resourceLog.TraceId = App.GetTraceId(); - resourceLog.Method = EnumUtils.GetEnum<EnumResourceMethod>(context.HttpContext.Request.Method); - resourceLog.Domain = $"{context.HttpContext.Request.Scheme}://{context.HttpContext.Request.Host}"; - resourceLog.Path = context.HttpContext.Request.Path; - resourceLog.ClientIpAddress = context.HttpContext.GetRemoteIpAddressToIPv4(); - resourceLog.CreatedUserId = logier?.Id; - resourceLog.CreatedEnterpriseId = logier?.EnterpriseId; - resourceLog.Request = context.ActionArguments?.ToJson(); - resourceLog.RequestHeaders = context.HttpContext.Request.Headers.ToJson(); - - await rep.InsertNowAsync(resourceLog); - - //============== 杩欓噷鏄墽琛屾柟娉曚箣鍚庤幏鍙栨暟鎹� ==================== - var actionContext = await next(); - - resourceLog.UpdatedTime = DateTimeOffset.Now; - if (actionContext.Result is JsonResult jsonResult) + try { - resourceLog.Response = jsonResult.Value.ToJson(); + Console.SetOut(consoleWriter); + + var serviceScopeFactory = App.GetService<IServiceScopeFactory>(); + var serviceScope = serviceScopeFactory.CreateScope(); + var rep = serviceScope.ServiceProvider.GetRequiredService<IRepository<ResourceLog, LogDbContextLocator>>(); + var logier = JwtUtils.GetCurrentLogier(); + + var resourceLog = new ResourceLog(); + resourceLog.CreatedTime = DateTimeOffset.Now; + resourceLog.Id = IDGen.NextID(); + resourceLog.TraceId = App.GetTraceId(); + resourceLog.Method = EnumUtils.GetEnum<EnumResourceMethod>(context.HttpContext.Request.Method); + resourceLog.Domain = $"{context.HttpContext.Request.Scheme}://{context.HttpContext.Request.Host}"; + resourceLog.Path = context.HttpContext.Request.Path; + resourceLog.ClientIpAddress = context.HttpContext.GetRemoteIpAddressToIPv4(); + resourceLog.CreatedUserId = logier?.Id; + resourceLog.CreatedEnterpriseId = logier?.EnterpriseId; + resourceLog.Request = context.ActionArguments?.ToJson(); + resourceLog.RequestHeaders = context.HttpContext.Request.Headers.ToJson(); + + Console.SetOut(originalConsoleOut); + await rep.InsertNowAsync(resourceLog); + Console.SetOut(consoleWriter); + + //============== 杩欓噷鏄墽琛屾柟娉曚箣鍚庤幏鍙栨暟鎹� ==================== + var actionContext = await next(); + Console.SetOut(originalConsoleOut); + + resourceLog.UpdatedTime = DateTimeOffset.Now; + if (actionContext.Result is JsonResult jsonResult) + { + resourceLog.Response = jsonResult.Value.ToJson(); + } + resourceLog.ResponseHeaders = context.HttpContext.Response.Headers.ToJson(); + resourceLog.IsSuccess = actionContext.Exception == null; + resourceLog.ConsoleLogs = consoleWriter.ToString(); + + stopwatch.Stop(); + resourceLog.ElapsedMilliseconds = stopwatch.ElapsedMilliseconds; + + await rep.UpdateNowAsync(resourceLog); } - resourceLog.ResponseHeaders = context.HttpContext.Response.Headers.ToJson(); - resourceLog.IsSuccess = actionContext.Exception == null; - - stopwatch.Stop(); - resourceLog.ElapsedMilliseconds = stopwatch.ElapsedMilliseconds; - - await rep.UpdateNowAsync(resourceLog); + finally + { + Console.SetOut(originalConsoleOut); // 鎭㈠ Console 鍘熷杈撳嚭娴� + consoleWriter.Dispose(); // 閲婃斁娴佽祫婧� + } } } } -- Gitblit v1.9.1