diff --git a/HttpClientStudy.Core/Utils/StartupUtility.cs b/HttpClientStudy.Core/Utilities/StartupUtility.cs similarity index 98% rename from HttpClientStudy.Core/Utils/StartupUtility.cs rename to HttpClientStudy.Core/Utilities/StartupUtility.cs index 53c8269..7f59c29 100644 --- a/HttpClientStudy.Core/Utils/StartupUtility.cs +++ b/HttpClientStudy.Core/Utilities/StartupUtility.cs @@ -68,7 +68,6 @@ namespace HttpClientStudy.Core.Utils /// <summary> /// 关闭webapi项目 - /// (出现webapi项目启动命令行窗口) /// </summary> public static void ExitWebApiProject() { diff --git a/HttpClientStudy.UnitTest/HttpClientStudy.UnitTest.csproj b/HttpClientStudy.UnitTest/HttpClientStudy.UnitTest.csproj index 47091ea..0dbda1b 100644 --- a/HttpClientStudy.UnitTest/HttpClientStudy.UnitTest.csproj +++ b/HttpClientStudy.UnitTest/HttpClientStudy.UnitTest.csproj @@ -20,6 +20,12 @@ <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="8.0.1" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" /> <PackageReference Include="Moq" Version="4.20.70" /> + <PackageReference Include="Serilog" Version="3.1.1" /> + <PackageReference Include="Serilog.Extensions.Hosting" Version="8.0.0" /> + <PackageReference Include="Serilog.Extensions.Logging" Version="8.0.0" /> + <PackageReference Include="Serilog.Sinks.Console" Version="5.0.1" /> + <PackageReference Include="Serilog.Sinks.Debug" Version="2.0.0" /> + <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> <PackageReference Include="System.Net.Http.Json" Version="8.0.0" /> <PackageReference Include="xunit" Version="2.6.6" /> <PackageReference Include="Xunit.DependencyInjection" Version="8.9.1" /> diff --git a/HttpClientStudy.UnitTest/UseXunitTest.cs b/HttpClientStudy.UnitTest/UseXunitTest.cs index 37ecf64..465822c 100644 --- a/HttpClientStudy.UnitTest/UseXunitTest.cs +++ b/HttpClientStudy.UnitTest/UseXunitTest.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using Microsoft.Extensions.Logging; + +using Xunit.Abstractions; namespace HttpClientStudy.UnitTest { @@ -7,17 +9,20 @@ namespace HttpClientStudy.UnitTest /// </summary> public class UseXUnitTest { - private readonly ITestOutputHelper _logger; + private readonly ITestOutputHelper _testOutput; + private ILogger _logger; - public UseXUnitTest(ITestOutputHelper outputHelper) + public UseXUnitTest(ITestOutputHelper outputHelper,ILogger<UseXUnitTest> logger) { - _logger = outputHelper; + _testOutput = outputHelper; + _logger = logger; } [Fact] public void UseXUnit_Test() { - _logger.WriteLine("使用 xUnit 单元测试框架!"); + _testOutput.WriteLine("使用 xUnit 单元测试框架!"); + _logger.LogError("使用 xUnit 单元测试框架!"); Assert.True(true,"使用 xUnit"); } } diff --git a/HttpClientStudy.UnitTest/startup.cs b/HttpClientStudy.UnitTest/startup.cs index 04b9ae9..e7dcf3b 100644 --- a/HttpClientStudy.UnitTest/startup.cs +++ b/HttpClientStudy.UnitTest/startup.cs @@ -12,6 +12,8 @@ using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using Serilog; + using Xunit; using Xunit.DependencyInjection; @@ -65,15 +67,9 @@ namespace HttpClientStudy.UnitTest { options.PreserveExecutionContext = true; }) - .ConfigureTestServices(a => - { - Console.WriteLine("+++++++++++++++++++++++++++++++++"); - - a.BuildServiceProvider().GetRequiredService<IHostApplicationLifetime>().ApplicationStopping.Register(() => - { - Console.WriteLine("========================="); - }); - + .ConfigureTestServices(services => + { + }) .UseStartup<WebApiStartup>() ; @@ -88,7 +84,7 @@ namespace HttpClientStudy.UnitTest { services.BuildServiceProvider().GetRequiredService<IHostApplicationLifetime>().ApplicationStopping.Register(() => { - Console.WriteLine("========================="); + }); } @@ -96,7 +92,13 @@ namespace HttpClientStudy.UnitTest { public void ConfigureServices(IServiceCollection services) { - services.AddLogging(lb => lb.AddXunitOutput()); + services.AddLogging(lb => lb.AddXunitOutput()); + services.AddSerilog((services, loggerConfiguration) => + { + loggerConfiguration + .WriteTo.File("log.txt", outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {SourceContext}: {Message:lj}{NewLine}{Exception}") + .WriteTo.Console(); + }); } public void Configure(IApplicationBuilder app) diff --git a/HttpClientStudy.WebClient/Controllers/CallApiController.cs b/HttpClientStudy.WebClient/Controllers/CallApiController.cs index 79bb06e..615da95 100644 --- a/HttpClientStudy.WebClient/Controllers/CallApiController.cs +++ b/HttpClientStudy.WebClient/Controllers/CallApiController.cs @@ -18,5 +18,11 @@ namespace HttpClientStudy.WebClient.Controllers { return Ok("ping"); } + + [HttpGet] + public IActionResult Exception() + { + throw new Exception("异常测试"); + } } } diff --git a/HttpClientStudy.WebClient/Program.cs b/HttpClientStudy.WebClient/Program.cs index f791495..cc81b07 100644 --- a/HttpClientStudy.WebClient/Program.cs +++ b/HttpClientStudy.WebClient/Program.cs @@ -2,6 +2,9 @@ using System.Diagnostics; using HttpClientStudy.Core.Utils; +//����WebApi���� +StartupUtility.StartWebApiProject(); + var builder = WebApplication.CreateBuilder(args); // Add services to the container. @@ -24,36 +27,28 @@ app.UseAuthorization(); app.MapControllers(); -Process currentProcess = Process.GetCurrentProcess(); -currentProcess.EnableRaisingEvents = true; -currentProcess.Exited += (s, r) => -{ - Console.WriteLine("000000000000000000000000000000000000"); -}; - +#region �˳�ʱ���ر�WebAPI���� +/* + * 1���˳�ִ�л��ƣ�������̫�ɿ���ֻ�������˳�ʱ��ִ�С� + * 2�������˳������� ctl+c ���� + * 3���������˳������� ����������ڴ�й©���رս��̣��ر��ǵ���WebAPIʱ���������ʱ�������������ر������ʱ�˳������쳣�˳��� + */ // ��ȡ IHostApplicationLifetime ʵ�� var applicationLifetime = app.Services.GetRequiredService<IHostApplicationLifetime>(); -// ע��Ӧ�ó���ر��¼� -applicationLifetime.ApplicationStopping.Register(() => +// ע��Ӧ�ó���ֹͣ�¼����ر�WebApi +applicationLifetime.ApplicationStopping.Register(() => { - //�ر�WebApi + //ע�⣺�� Visual Studio 2022 Ԥ�����У�ִ��ʱ�쳣����ʽ����������Ӧ����Ԥ�����Bug StartupUtility.ExitWebApiProject(); }); -applicationLifetime.ApplicationStopped.Register(() => { - Console.WriteLine("xxxxxxxxxxxxxxxxxxxx"); -}); - -// ע�� AppDomain ��δ�����쳣�¼� -AppDomain.CurrentDomain.UnhandledException += (s,e)=> +applicationLifetime.ApplicationStopped.Register(() => { - Console.WriteLine("�˳�"); -}; - + Console.WriteLine("������ֹͣ"); +}); -//ȷ������WebApi���� -StartupUtility.StartWebApiProject(); +#endregion app.Run(); diff --git a/HttpClientStudy.sln b/HttpClientStudy.sln index 5398fd0..8097e05 100644 --- a/HttpClientStudy.sln +++ b/HttpClientStudy.sln @@ -15,12 +15,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpClientStudy.Service", " EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{56D9132E-6D9B-4D4B-B82C-D8F74AA4373A}" ProjectSection(SolutionItems) = preProject + Docs\1.1.概述.ipynb = Docs\1.1.概述.ipynb + Docs\1.2.使用原则.ipynb = Docs\1.2.使用原则.ipynb Docs\说明.md = Docs\说明.md EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpClientStudy.Config", "HttpClientStudy.Config\HttpClientStudy.Config.csproj", "{78FCC8F1-C196-4D4F-81A0-D0A1E0843AAE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpClientStudy.WebClient", "HttpClientStudy.WebClient\HttpClientStudy.WebClient.csproj", "{40EFD636-C7A1-4AB1-A364-E044FBF9CF50}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpClientStudy.WebClient", "HttpClientStudy.WebClient\HttpClientStudy.WebClient.csproj", "{40EFD636-C7A1-4AB1-A364-E044FBF9CF50}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution