ASP.NET 核心 2.2 - Serilog |错过活动
ASP.NET Core 2.2 - Serilog | Missing out on events
ASP.NET Core 的新手,并尝试从另一个 [Core] 库中重用我已经配置的 Serilog。这是我的设置 -
Test.sln
Test.Core (project)
- Serilog init config
- Autofac dependency injection
- Other stuff
Test.WebAPI (project)
- Configured Autofac module from my Core library in ConfigureContainer method.
了解基本设置。我所做的任何 services/controllers 都从我在核心库的 Autofac 模块中完成的注册中接收依赖项(也包括日志记录,但前提是我明确调用 _logger.Information / _logger.Debug,等等. 并按照 Serilog 配置中的配置打印到控制台和日志文件。
似乎 ASP.NET 有自己的记录器,并且正在使用自己的记录器记录所有事件,例如这些事件 - https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2#sample-logging-output
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 GET http://localhost:5000/api/todo/0
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
Executing action method TodoApi.Controllers.TodoController.GetById (TodoApi) with arguments (0) - ModelState is Valid
info: TodoApi.Controllers.TodoController[1002]
Getting item 0
warn: TodoApi.Controllers.TodoController[4000]
GetById(0) NOT FOUND
我正在尝试将 ASP.NET 的记录器记录的事件重新路由到我自己的记录器,并且周围只有一个记录器,但不知道如何操作。任何人都可以指出我正确的方向吗?提前致谢!
对于 "silence" ASP.NET 默认日志,您需要将此添加到您的 appsettings.json:
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft": "Warning",
"System": "Warning"
}
}
那么默认的logger只会记录"Warning"或更低级别的所有内容(日志有6个级别:Trace、Debug、Information、警告,严重错误 )。另外,为了启用 Serilog,你只需要添加这个包:
<PackageReference Include="Serilog.AspNetCore" Version="#version#" />
并将此添加到您的 Program.cs
:
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog(); //this line
然后你可以简单地用 DI 注入 ILogger<T>
,它会在你的配置中使用 Serilog。另外,它会封装你的 Serilog,这样以后使用其他日志框架会更容易
更新:
为了删除以前配置的提供程序,请尝试添加此行:
new WebHostBuilder()
.ConfigureLogging(builder => builder.ClearProviders()) // <--here
在我的例子中,我必须在 Startup.cs/Configure()
方法中从核心库设置 Serilog 的 ILogger。
Program.cs
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureServices(services => services.AddAutofac())
.UseStartup<Startup>()
.UseSerilog(); // Added this line as per docs
Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IZLogger zLogger)
{
...
Log.Logger = zLogger.GetCurrentClassLogger<Startup>(); // Set Serilog's ILogger from Core library
app.UseSerilogRequestLogging(); // Added this line as per docs
...
}
示例日志:
2019-07-22 19:01:03.179 -04:00 | [INFO] | Request starting HTTP/1.1 GET https://localhost:5001/favicon.ico
2019-07-22 19:01:03.180 -04:00 | [INFO] | HTTP GET /favicon.ico responded 404 in 0.394846 ms
2019-07-22 19:01:03.181 -04:00 | [INFO] | Request finished in 1.8292ms 404 text/plain
ASP.NET Core 的新手,并尝试从另一个 [Core] 库中重用我已经配置的 Serilog。这是我的设置 -
Test.sln
Test.Core (project)
- Serilog init config
- Autofac dependency injection
- Other stuff
Test.WebAPI (project)
- Configured Autofac module from my Core library in ConfigureContainer method.
了解基本设置。我所做的任何 services/controllers 都从我在核心库的 Autofac 模块中完成的注册中接收依赖项(也包括日志记录,但前提是我明确调用 _logger.Information / _logger.Debug,等等. 并按照 Serilog 配置中的配置打印到控制台和日志文件。
似乎 ASP.NET 有自己的记录器,并且正在使用自己的记录器记录所有事件,例如这些事件 - https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2#sample-logging-output
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 GET http://localhost:5000/api/todo/0
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
Executing action method TodoApi.Controllers.TodoController.GetById (TodoApi) with arguments (0) - ModelState is Valid
info: TodoApi.Controllers.TodoController[1002]
Getting item 0
warn: TodoApi.Controllers.TodoController[4000]
GetById(0) NOT FOUND
我正在尝试将 ASP.NET 的记录器记录的事件重新路由到我自己的记录器,并且周围只有一个记录器,但不知道如何操作。任何人都可以指出我正确的方向吗?提前致谢!
对于 "silence" ASP.NET 默认日志,您需要将此添加到您的 appsettings.json:
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft": "Warning",
"System": "Warning"
}
}
那么默认的logger只会记录"Warning"或更低级别的所有内容(日志有6个级别:Trace、Debug、Information、警告,严重错误 )。另外,为了启用 Serilog,你只需要添加这个包:
<PackageReference Include="Serilog.AspNetCore" Version="#version#" />
并将此添加到您的 Program.cs
:
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog(); //this line
然后你可以简单地用 DI 注入 ILogger<T>
,它会在你的配置中使用 Serilog。另外,它会封装你的 Serilog,这样以后使用其他日志框架会更容易
更新: 为了删除以前配置的提供程序,请尝试添加此行:
new WebHostBuilder()
.ConfigureLogging(builder => builder.ClearProviders()) // <--here
在我的例子中,我必须在 Startup.cs/Configure()
方法中从核心库设置 Serilog 的 ILogger。
Program.cs
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureServices(services => services.AddAutofac())
.UseStartup<Startup>()
.UseSerilog(); // Added this line as per docs
Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IZLogger zLogger)
{
...
Log.Logger = zLogger.GetCurrentClassLogger<Startup>(); // Set Serilog's ILogger from Core library
app.UseSerilogRequestLogging(); // Added this line as per docs
...
}
示例日志:
2019-07-22 19:01:03.179 -04:00 | [INFO] | Request starting HTTP/1.1 GET https://localhost:5001/favicon.ico
2019-07-22 19:01:03.180 -04:00 | [INFO] | HTTP GET /favicon.ico responded 404 in 0.394846 ms
2019-07-22 19:01:03.181 -04:00 | [INFO] | Request finished in 1.8292ms 404 text/plain