繁体   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