ASP.NET 酷睿 2.2 - Serilog |错过事件


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.

弄清楚了基本设置。我创建的任何服务/控制器都从我在核心库的 Autofac 模块中完成的注册中接收依赖项(也包括日志记录,但前提是我显式调用_logger。信息/_logger。调试等,并打印到Serilog配置中配置的控制台和日志文件(。

似乎 ASP.NET 有自己的记录器,并且正在使用自己的记录器来记录所有事件,例如这些事件 - https://learn.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的记录器到我自己的记录器,周围有一个记录器,但无法弄清楚如何。请问谁能指出我正确的方向?提前感谢!

要"静音"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()方法中从核心库中设置 Serilog 的 ILogger。

程序.cs

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
          .ConfigureServices(services => services.AddAutofac())
          .UseStartup<Startup>()
          .UseSerilog(); // Added this line as per docs

启动.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

最新更新