[英]Serilog not working from configuration in asp.net core 2.2 API
[英]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.
弄清楚了基本設置。 我所做的任何服務/控制器都將收到我在Core庫的Autofac模塊中所做的注冊(包括日志記錄)的依賴關系,但前提是我明確調用_logger.Information / _logger.Debug等,並同時打印到兩者控制台和日志文件(在Serilog配置中配置)。
似乎ASP.NET擁有自己的記錄器,並且正在使用自己的記錄器來記錄所有事件,例如這些事件-https: //docs.microsoft.com/zh-cn/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記錄器記錄的事件重新路由到我自己的記錄器,並且到處都有一個記錄器,但是無法弄清楚如何進行記錄。 有人能指出我正確的方向嗎? 提前致謝!
要“靜音” ASP.NET默認日志,需要將其添加到appsettings.json中:
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft": "Warning",
"System": "Warning"
}
}
然后,默認記錄器將僅記錄“警告”或更低級別的所有內容(有6個級別的日志: 跟蹤,調試,信息,警告,嚴重錯誤 )。 另外,為了啟用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()
方法的Core庫中設置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
啟動文件
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.