From 14e7f75512a5e3a5288bcf679c21107e38a32951 Mon Sep 17 00:00:00 2001 From: Hinse <756681202@qq.com> Date: Fri, 30 Jul 2021 10:02:44 +0800 Subject: [PATCH] =?UTF-8?q?1.NET=E5=9F=BA=E7=A1=80=E5=BA=93=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E4=B8=BA5.0.301=202.Furion=E5=BA=93=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=203.=E5=A2=9E=E5=8A=A0serilog=20seq=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ResultInfos/ResultService.cs | 1 - Waste.Core/LoggerHelper.cs | 99 +++++++++++++++++++ Waste.Core/Waste.Core.csproj | 10 +- .../Handlers/RESTfulResultProvider.cs | 39 +++++--- Waste.Web.Core/Startup.cs | 5 +- Waste.Web.Core/Waste.Web.Core.csproj | 1 + Waste.Web.Core/Waste.Web.Core.xml | 16 +-- Waste.Web.Entry/Program.cs | 1 + .../waste.ybhdmob.com.pubxml.user | 2 +- 9 files changed, 146 insertions(+), 28 deletions(-) create mode 100644 Waste.Core/LoggerHelper.cs diff --git a/Waste.Application/ResultInfos/ResultService.cs b/Waste.Application/ResultInfos/ResultService.cs index 5ff1860..0775877 100644 --- a/Waste.Application/ResultInfos/ResultService.cs +++ b/Waste.Application/ResultInfos/ResultService.cs @@ -180,7 +180,6 @@ namespace Waste.Application } var typeHex = Convert.ToHexString(typeBytes); myPackage.Area = Convert.ToInt32(typeHex, 16).ToString(); - //十六进制转10进制 } //000F000002.16进制 var areaHex = Convert.ToHexString(areaBytes); diff --git a/Waste.Core/LoggerHelper.cs b/Waste.Core/LoggerHelper.cs new file mode 100644 index 0000000..de8c5bf --- /dev/null +++ b/Waste.Core/LoggerHelper.cs @@ -0,0 +1,99 @@ +using Microsoft.AspNetCore.Http; +using Serilog; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Waste.Core +{ + public static class LoggerHelper + { + public static void EnrichFromRequest(IDiagnosticContext diagnosticContext, HttpContext httpContext) + { + var request = httpContext.Request; + + // Set all the common properties available for every request + diagnosticContext.Set("Host", request.Host); + diagnosticContext.Set("Scheme", request.Scheme); + + // Only set it if available. You're not sending sensitive data in a querystring right?! + if (request.QueryString.HasValue) + { + diagnosticContext.Set("QueryString", request.QueryString.Value); + } + string ip = string.Empty; + if (request.Headers.ContainsKey("X-Real-IP")) + { + ip = request.Headers["X-Real-IP"].ToString(); + } + else + { + ip = httpContext.Connection.RemoteIpAddress.ToString(); + } + if (!string.IsNullOrEmpty(ip)) + { + diagnosticContext.Set("IP", ip); + } + if (!string.IsNullOrEmpty(request.Headers["token"].ToString())) + { + diagnosticContext.Set("token", request.Headers["token"].ToString()); + } + if (!string.IsNullOrEmpty(request.Headers["Authorization"].ToString())) + { + diagnosticContext.Set("Authorization", request.Headers["Authorization"].ToString()); + } + if (!string.IsNullOrEmpty(request.Headers["X-Authorization"].ToString())) + { + diagnosticContext.Set("X-Authorization", request.Headers["X-Authorization"].ToString()); + } + if (!string.IsNullOrEmpty(request.Headers["User-Agent"].ToString())) + { + diagnosticContext.Set("User-Agent", request.Headers["User-Agent"].ToString()); + } + if (request.Method == "POST" && request.ContentLength > 0) + { + if (httpContext.RequestAborted.IsCancellationRequested) + { + diagnosticContext.Set("postdata", "用户取消了操作"); + } + else + { + string postdata = string.Empty; + try + { + if (request.Body.Length > 0) + { + request.EnableBuffering(); + request.Body.Position = 0; + using (var sr = new StreamReader(request.Body)) + { + postdata = Task.Factory.StartNew(sr.ReadToEndAsync, TaskCreationOptions.LongRunning) + .GetAwaiter().GetResult().Result; + // postdata = await sr.ReadToEndAsync(); + } + if (!string.IsNullOrEmpty(postdata)) + { + diagnosticContext.Set("PostData", postdata); + } + } + } + catch (Exception) + { + } + } + } + // Set the content-type of the Response at this point + diagnosticContext.Set("ContentType", httpContext.Response.ContentType); + + // Retrieve the IEndpointFeature selected for the request + var endpoint = httpContext.GetEndpoint(); + if (endpoint is object) // endpoint != null + { + diagnosticContext.Set("EndpointName", endpoint.DisplayName); + } + } + } +} diff --git a/Waste.Core/Waste.Core.csproj b/Waste.Core/Waste.Core.csproj index 478d121..836b069 100644 --- a/Waste.Core/Waste.Core.csproj +++ b/Waste.Core/Waste.Core.csproj @@ -15,11 +15,11 @@ - - - - - + + + + + diff --git a/Waste.Web.Core/Handlers/RESTfulResultProvider.cs b/Waste.Web.Core/Handlers/RESTfulResultProvider.cs index b5986f2..af4d650 100644 --- a/Waste.Web.Core/Handlers/RESTfulResultProvider.cs +++ b/Waste.Web.Core/Handlers/RESTfulResultProvider.cs @@ -1,6 +1,7 @@ using Furion.DataValidation; using Furion.DependencyInjection; using Furion.UnifyResult; +using Furion.UnifyResult.Internal; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; @@ -16,18 +17,22 @@ namespace Waste.Web.Core /// /// RESTFUL 风格返回值 /// - [SkipScan, UnifyModel(typeof(RESTfulResult<>))] + [SuppressSniffer, UnifyModel(typeof(RESTfulResult<>))] public class RESTfulResultProvider : IUnifyResultProvider { + /// /// 异常返回值 /// /// + /// /// - public IActionResult OnException(ExceptionContext context) + public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata) { //解析异常信息 - var (StatusCode, ErrorCode, Errors) = UnifyContext.GetExceptionMetadata(context); + var ErrorCode = metadata.ErrorCode; + var StatusCode = metadata.StatusCode; + var Errors = metadata.Errors; object data; // 处理内容结果 if (context.Result is ContentResult contentResult) data = contentResult.Content; @@ -50,10 +55,12 @@ namespace Waste.Web.Core /// /// /// - /// + /// /// - public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultStatusCodesOptions options = null) + public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings) { + // 设置响应状态码 + UnifyContext.SetResponseStatusCodes(context, statusCode, unifyResultSettings); switch (statusCode) { // 处理 401 状态码 @@ -90,10 +97,10 @@ namespace Waste.Web.Core /// 成功返回值 /// /// + /// /// - public IActionResult OnSucceeded(ActionExecutedContext context) + public IActionResult OnSucceeded(ActionExecutedContext context, object data) { - object data; // 处理内容结果 if (context.Result is ContentResult contentResult) data = contentResult.Content; // 处理对象结果 @@ -115,18 +122,26 @@ namespace Waste.Web.Core /// 验证失败返回值 /// /// - /// - /// - /// + /// /// - public IActionResult OnValidateFailed(ActionExecutingContext context, ModelStateDictionary modelStates, IEnumerable validationResults, string validateFailedMessage) + public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata) { + var msg = "发生错误"; + var validationResults = metadata.ValidationResult; + if (validationResults != null && validationResults.Count() > 0) + { + var messages = validationResults.FirstOrDefault().Value; + if (messages.Length > 0) + { + msg = messages[0]; + } + } return new JsonResult(new RESTfulResult { StatusCode = StatusCodes.Status400BadRequest, Succeeded = false, Data = null, - Errors = validationResults, + Errors = msg, Extras = UnifyContext.Take(), Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }); diff --git a/Waste.Web.Core/Startup.cs b/Waste.Web.Core/Startup.cs index da7d764..ffab21b 100644 --- a/Waste.Web.Core/Startup.cs +++ b/Waste.Web.Core/Startup.cs @@ -11,6 +11,7 @@ using Nirvana.Common; using Serilog; using System.IO; using System.Threading.Tasks; +using Waste.Core; namespace Waste.Web.Core { @@ -68,7 +69,9 @@ namespace Waste.Web.Core app.UseHttpsRedirection(); app.UseStaticFiles(); - app.UseSerilogRequestLogging(); //记录请求日志,必须在 UseStaticFiles 和 UseRouting 之间 + app.UseSerilogRequestLogging(opts => { + opts.EnrichDiagnosticContext = LoggerHelper.EnrichFromRequest; + }); // 必须在 UseStaticFiles 和 UseRouting 之间,记录请求日志 app.UseRouting(); app.UseCorsAccessor(); diff --git a/Waste.Web.Core/Waste.Web.Core.csproj b/Waste.Web.Core/Waste.Web.Core.csproj index e9d7d05..f34f6b4 100644 --- a/Waste.Web.Core/Waste.Web.Core.csproj +++ b/Waste.Web.Core/Waste.Web.Core.csproj @@ -16,6 +16,7 @@ + diff --git a/Waste.Web.Core/Waste.Web.Core.xml b/Waste.Web.Core/Waste.Web.Core.xml index e477f38..a843d0b 100644 --- a/Waste.Web.Core/Waste.Web.Core.xml +++ b/Waste.Web.Core/Waste.Web.Core.xml @@ -88,37 +88,37 @@ RESTFUL 风格返回值 - + 异常返回值 + - + 处理输出状态码 - + - + 成功返回值 + - + 验证失败返回值 - - - + diff --git a/Waste.Web.Entry/Program.cs b/Waste.Web.Entry/Program.cs index 4f193e9..d81e7a2 100644 --- a/Waste.Web.Entry/Program.cs +++ b/Waste.Web.Entry/Program.cs @@ -37,6 +37,7 @@ namespace Waste.Web.Entry new string('-', 50);//ģ ///1.restrictedToMinimumLevelLogEventLevel config + .WriteTo.Seq("http://localhost:5341/") //.MinimumLevel.Debug() // SinkС¼ //.MinimumLevel.Override("Microsoft", LogEventLevel.Fatal) //.Enrich.FromLogContext() diff --git a/Waste.Web.Entry/Properties/PublishProfiles/waste.ybhdmob.com.pubxml.user b/Waste.Web.Entry/Properties/PublishProfiles/waste.ybhdmob.com.pubxml.user index 57c0b6a..9d00fd6 100644 --- a/Waste.Web.Entry/Properties/PublishProfiles/waste.ybhdmob.com.pubxml.user +++ b/Waste.Web.Entry/Properties/PublishProfiles/waste.ybhdmob.com.pubxml.user @@ -5,6 +5,6 @@ https://go.microsoft.com/fwlink/?LinkID=208121. <_PublishTargetUrl>D:\webpublish\waste.ybhdmob.com - True|2021-07-29T11:06:09.1449349Z;True|2021-06-11T08:16:29.9542894+08:00;True|2021-06-04T14:46:02.2707457+08:00;True|2021-06-02T15:08:52.8245632+08:00;True|2021-06-02T15:05:50.3614099+08:00;True|2021-06-02T14:59:32.3690948+08:00;True|2021-06-02T14:10:25.1182836+08:00;True|2021-06-02T14:09:54.9215833+08:00;True|2021-06-01T10:41:54.9488501+08:00;True|2021-06-01T10:38:56.0283198+08:00;True|2021-05-28T13:59:02.2308877+08:00;True|2021-05-28T11:56:26.6796406+08:00;True|2021-05-28T11:28:00.4087907+08:00;True|2021-05-27T16:18:09.5993838+08:00;True|2021-05-27T16:07:31.3484951+08:00;True|2021-05-27T11:30:37.9119310+08:00;True|2021-05-27T11:28:35.5374674+08:00;True|2021-05-27T08:00:09.1625592+08:00;True|2021-05-26T20:42:17.0852150+08:00;True|2021-05-26T20:36:49.7527415+08:00;True|2021-05-25T17:57:31.8791293+08:00;True|2021-05-25T13:49:29.6488978+08:00;True|2021-05-25T13:48:24.6686105+08:00;True|2021-05-25T13:25:41.2512493+08:00;True|2021-05-24T17:55:33.3800078+08:00;True|2021-05-20T14:35:30.6957985+08:00;True|2021-05-20T13:17:22.6192995+08:00;True|2021-05-20T10:51:38.1268169+08:00;True|2021-05-19T19:50:03.7000224+08:00;True|2021-05-19T19:44:27.2518811+08:00;True|2021-05-19T19:43:26.5916681+08:00;True|2021-05-19T19:36:29.3197365+08:00;True|2021-05-19T19:30:00.3802430+08:00;True|2021-05-19T17:55:23.7939835+08:00;True|2021-05-19T11:05:17.9043392+08:00;True|2021-05-19T10:19:38.4839988+08:00;True|2021-05-19T10:17:19.7430612+08:00;True|2021-05-19T10:13:23.0031721+08:00;True|2021-05-19T10:06:03.9881599+08:00;True|2021-05-18T14:39:03.8876574+08:00;True|2021-05-18T14:23:46.9818836+08:00;True|2021-05-18T14:19:56.2382079+08:00;True|2021-05-18T11:29:53.5497590+08:00;True|2021-05-18T11:16:18.0123853+08:00;True|2021-05-17T18:59:52.4159105+08:00;True|2021-05-17T18:53:37.9438984+08:00;True|2021-05-17T18:48:14.9625161+08:00;True|2021-05-17T17:46:03.7723404+08:00;True|2021-05-17T17:14:20.2312990+08:00;True|2021-05-17T16:44:34.5837616+08:00;True|2021-05-17T16:25:20.1087804+08:00;True|2021-05-17T11:35:27.9388562+08:00; + True|2021-07-30T01:32:38.2676032Z;True|2021-07-30T09:14:42.6170851+08:00;True|2021-07-29T19:06:09.1449349+08:00;True|2021-06-11T08:16:29.9542894+08:00;True|2021-06-04T14:46:02.2707457+08:00;True|2021-06-02T15:08:52.8245632+08:00;True|2021-06-02T15:05:50.3614099+08:00;True|2021-06-02T14:59:32.3690948+08:00;True|2021-06-02T14:10:25.1182836+08:00;True|2021-06-02T14:09:54.9215833+08:00;True|2021-06-01T10:41:54.9488501+08:00;True|2021-06-01T10:38:56.0283198+08:00;True|2021-05-28T13:59:02.2308877+08:00;True|2021-05-28T11:56:26.6796406+08:00;True|2021-05-28T11:28:00.4087907+08:00;True|2021-05-27T16:18:09.5993838+08:00;True|2021-05-27T16:07:31.3484951+08:00;True|2021-05-27T11:30:37.9119310+08:00;True|2021-05-27T11:28:35.5374674+08:00;True|2021-05-27T08:00:09.1625592+08:00;True|2021-05-26T20:42:17.0852150+08:00;True|2021-05-26T20:36:49.7527415+08:00;True|2021-05-25T17:57:31.8791293+08:00;True|2021-05-25T13:49:29.6488978+08:00;True|2021-05-25T13:48:24.6686105+08:00;True|2021-05-25T13:25:41.2512493+08:00;True|2021-05-24T17:55:33.3800078+08:00;True|2021-05-20T14:35:30.6957985+08:00;True|2021-05-20T13:17:22.6192995+08:00;True|2021-05-20T10:51:38.1268169+08:00;True|2021-05-19T19:50:03.7000224+08:00;True|2021-05-19T19:44:27.2518811+08:00;True|2021-05-19T19:43:26.5916681+08:00;True|2021-05-19T19:36:29.3197365+08:00;True|2021-05-19T19:30:00.3802430+08:00;True|2021-05-19T17:55:23.7939835+08:00;True|2021-05-19T11:05:17.9043392+08:00;True|2021-05-19T10:19:38.4839988+08:00;True|2021-05-19T10:17:19.7430612+08:00;True|2021-05-19T10:13:23.0031721+08:00;True|2021-05-19T10:06:03.9881599+08:00;True|2021-05-18T14:39:03.8876574+08:00;True|2021-05-18T14:23:46.9818836+08:00;True|2021-05-18T14:19:56.2382079+08:00;True|2021-05-18T11:29:53.5497590+08:00;True|2021-05-18T11:16:18.0123853+08:00;True|2021-05-17T18:59:52.4159105+08:00;True|2021-05-17T18:53:37.9438984+08:00;True|2021-05-17T18:48:14.9625161+08:00;True|2021-05-17T17:46:03.7723404+08:00;True|2021-05-17T17:14:20.2312990+08:00;True|2021-05-17T16:44:34.5837616+08:00;True|2021-05-17T16:25:20.1087804+08:00;True|2021-05-17T11:35:27.9388562+08:00; \ No newline at end of file