1.NET基础库升级为5.0.301

2.Furion库升级
3.增加serilog seq日志
This commit is contained in:
Hinse 2021-07-30 10:02:44 +08:00
parent dc1aa3b09f
commit 14e7f75512
9 changed files with 146 additions and 28 deletions

View File

@ -180,7 +180,6 @@ namespace Waste.Application
} }
var typeHex = Convert.ToHexString(typeBytes); var typeHex = Convert.ToHexString(typeBytes);
myPackage.Area = Convert.ToInt32(typeHex, 16).ToString(); myPackage.Area = Convert.ToInt32(typeHex, 16).ToString();
//十六进制转10进制
} }
//000F000002.16进制 //000F000002.16进制
var areaHex = Convert.ToHexString(areaBytes); var areaHex = Convert.ToHexString(areaBytes);

View File

@ -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);
}
}
}
}

View File

@ -15,11 +15,11 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Furion" Version="2.7.9" /> <PackageReference Include="Furion" Version="2.15.10" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="2.7.9" /> <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="2.15.10" />
<PackageReference Include="Furion.Extras.DatabaseAccessor.SqlSugar" Version="2.7.9" /> <PackageReference Include="Furion.Extras.DatabaseAccessor.SqlSugar" Version="2.15.10" />
<PackageReference Include="Furion.Extras.Logging.Serilog" Version="2.7.9" /> <PackageReference Include="Furion.Extras.Logging.Serilog" Version="2.15.10" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="2.7.9" /> <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="2.15.10" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1,6 +1,7 @@
using Furion.DataValidation; using Furion.DataValidation;
using Furion.DependencyInjection; using Furion.DependencyInjection;
using Furion.UnifyResult; using Furion.UnifyResult;
using Furion.UnifyResult.Internal;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Filters;
@ -16,18 +17,22 @@ namespace Waste.Web.Core
/// <summary> /// <summary>
/// RESTFUL 风格返回值 /// RESTFUL 风格返回值
/// </summary> /// </summary>
[SkipScan, UnifyModel(typeof(RESTfulResult<>))] [SuppressSniffer, UnifyModel(typeof(RESTfulResult<>))]
public class RESTfulResultProvider : IUnifyResultProvider public class RESTfulResultProvider : IUnifyResultProvider
{ {
/// <summary> /// <summary>
/// 异常返回值 /// 异常返回值
/// </summary> /// </summary>
/// <param name="context"></param> /// <param name="context"></param>
/// <param name="metadata"></param>
/// <returns></returns> /// <returns></returns>
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; object data;
// 处理内容结果 // 处理内容结果
if (context.Result is ContentResult contentResult) data = contentResult.Content; if (context.Result is ContentResult contentResult) data = contentResult.Content;
@ -50,10 +55,12 @@ namespace Waste.Web.Core
/// </summary> /// </summary>
/// <param name="context"></param> /// <param name="context"></param>
/// <param name="statusCode"></param> /// <param name="statusCode"></param>
/// <param name="options"></param> /// <param name="unifyResultSettings"></param>
/// <returns></returns> /// <returns></returns>
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) switch (statusCode)
{ {
// 处理 401 状态码 // 处理 401 状态码
@ -90,10 +97,10 @@ namespace Waste.Web.Core
/// 成功返回值 /// 成功返回值
/// </summary> /// </summary>
/// <param name="context"></param> /// <param name="context"></param>
/// <param name="data"></param>
/// <returns></returns> /// <returns></returns>
public IActionResult OnSucceeded(ActionExecutedContext context) public IActionResult OnSucceeded(ActionExecutedContext context, object data)
{ {
object data;
// 处理内容结果 // 处理内容结果
if (context.Result is ContentResult contentResult) data = contentResult.Content; if (context.Result is ContentResult contentResult) data = contentResult.Content;
// 处理对象结果 // 处理对象结果
@ -115,18 +122,26 @@ namespace Waste.Web.Core
/// 验证失败返回值 /// 验证失败返回值
/// </summary> /// </summary>
/// <param name="context"></param> /// <param name="context"></param>
/// <param name="modelStates"></param> /// <param name="metadata"></param>
/// <param name="validationResults"></param>
/// <param name="validateFailedMessage"></param>
/// <returns></returns> /// <returns></returns>
public IActionResult OnValidateFailed(ActionExecutingContext context, ModelStateDictionary modelStates, IEnumerable<ValidateFailedModel> 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<object> return new JsonResult(new RESTfulResult<object>
{ {
StatusCode = StatusCodes.Status400BadRequest, StatusCode = StatusCodes.Status400BadRequest,
Succeeded = false, Succeeded = false,
Data = null, Data = null,
Errors = validationResults, Errors = msg,
Extras = UnifyContext.Take(), Extras = UnifyContext.Take(),
Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
}); });

View File

@ -11,6 +11,7 @@ using Nirvana.Common;
using Serilog; using Serilog;
using System.IO; using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
using Waste.Core;
namespace Waste.Web.Core namespace Waste.Web.Core
{ {
@ -68,7 +69,9 @@ namespace Waste.Web.Core
app.UseHttpsRedirection(); app.UseHttpsRedirection();
app.UseStaticFiles(); app.UseStaticFiles();
app.UseSerilogRequestLogging(); //记录请求日志,必须在 UseStaticFiles 和 UseRouting 之间 app.UseSerilogRequestLogging(opts => {
opts.EnrichDiagnosticContext = LoggerHelper.EnrichFromRequest;
}); // 必须在 UseStaticFiles 和 UseRouting 之间,记录请求日志
app.UseRouting(); app.UseRouting();
app.UseCorsAccessor(); app.UseCorsAccessor();

View File

@ -16,6 +16,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.5" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.5" />
<PackageReference Include="Serilog.Sinks.Seq" Version="5.0.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -88,37 +88,37 @@
RESTFUL 风格返回值 RESTFUL 风格返回值
</summary> </summary>
</member> </member>
<member name="M:Waste.Web.Core.RESTfulResultProvider.OnException(Microsoft.AspNetCore.Mvc.Filters.ExceptionContext)"> <member name="M:Waste.Web.Core.RESTfulResultProvider.OnException(Microsoft.AspNetCore.Mvc.Filters.ExceptionContext,Furion.UnifyResult.Internal.ExceptionMetadata)">
<summary> <summary>
异常返回值 异常返回值
</summary> </summary>
<param name="context"></param> <param name="context"></param>
<param name="metadata"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Waste.Web.Core.RESTfulResultProvider.OnResponseStatusCodes(Microsoft.AspNetCore.Http.HttpContext,System.Int32,Furion.UnifyResult.UnifyResultStatusCodesOptions)"> <member name="M:Waste.Web.Core.RESTfulResultProvider.OnResponseStatusCodes(Microsoft.AspNetCore.Http.HttpContext,System.Int32,Furion.UnifyResult.UnifyResultSettingsOptions)">
<summary> <summary>
处理输出状态码 处理输出状态码
</summary> </summary>
<param name="context"></param> <param name="context"></param>
<param name="statusCode"></param> <param name="statusCode"></param>
<param name="options"></param> <param name="unifyResultSettings"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Waste.Web.Core.RESTfulResultProvider.OnSucceeded(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext)"> <member name="M:Waste.Web.Core.RESTfulResultProvider.OnSucceeded(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext,System.Object)">
<summary> <summary>
成功返回值 成功返回值
</summary> </summary>
<param name="context"></param> <param name="context"></param>
<param name="data"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Waste.Web.Core.RESTfulResultProvider.OnValidateFailed(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext,Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary,System.Collections.Generic.IEnumerable{Furion.DataValidation.ValidateFailedModel},System.String)"> <member name="M:Waste.Web.Core.RESTfulResultProvider.OnValidateFailed(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext,Furion.DataValidation.ValidationMetadata)">
<summary> <summary>
验证失败返回值 验证失败返回值
</summary> </summary>
<param name="context"></param> <param name="context"></param>
<param name="modelStates"></param> <param name="metadata"></param>
<param name="validationResults"></param>
<param name="validateFailedMessage"></param>
<returns></returns> <returns></returns>
</member> </member>
</members> </members>

View File

@ -37,6 +37,7 @@ namespace Waste.Web.Entry
new string('-', 50);//输出模板 new string('-', 50);//输出模板
///1.输出所有restrictedToMinimumLevelLogEventLevel类型 ///1.输出所有restrictedToMinimumLevelLogEventLevel类型
config config
.WriteTo.Seq("http://localhost:5341/")
//.MinimumLevel.Debug() // 所有Sink的最小记录级别 //.MinimumLevel.Debug() // 所有Sink的最小记录级别
//.MinimumLevel.Override("Microsoft", LogEventLevel.Fatal) //.MinimumLevel.Override("Microsoft", LogEventLevel.Fatal)
//.Enrich.FromLogContext() //.Enrich.FromLogContext()

View File

@ -5,6 +5,6 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<_PublishTargetUrl>D:\webpublish\waste.ybhdmob.com</_PublishTargetUrl> <_PublishTargetUrl>D:\webpublish\waste.ybhdmob.com</_PublishTargetUrl>
<History>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;</History> <History>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;</History>
</PropertyGroup> </PropertyGroup>
</Project> </Project>