簡體   English   中英

ASP.NET Core 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.

弄清楚了基本設置。 我所做的任何服務/控制器都將收到我在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM