为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.NET Core 2.2 - Serilog | ASP.NET Core 2.2 错过活动

ASP.NET Core 2.2 - Serilog | ASP.NET Core 2.2 错过活动

C#
倚天杖 2023-07-09 16:49:33
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://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view= aspnetcore-2.2#sample-logging-outputinfo: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]      Request starting HTTP/1.1 GET http://localhost:5000/api/todo/0info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]      Executing action method TodoApi.Controllers.TodoController.GetById (TodoApi) with arguments (0) - ModelState is Validinfo: TodoApi.Controllers.TodoController[1002]      Getting item 0warn: TodoApi.Controllers.TodoController[4000]      GetById(0) NOT FOUND我正在尝试将 ASP.NET 记录器记录的事件重新路由到我自己的记录器,并且周围只有一个记录器,但不知道如何实现。有人能指出我正确的方向吗?提前致谢!
查看完整描述

2 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

要“静默”ASP.NET 默认日志,您需要将其添加到 appsettings.json 中:


"Logging": {

    "LogLevel": {

      "Default": "Debug",

      "Microsoft": "Warning",

      "System": "Warning"

    }

  }

那么默认记录器将只记录“Warning”或更低级别的所有内容(有 6 个级别的日志:Trace、Debug、Information、Warning、Error Critical)。另外,为了启用 Serilog,您只需要添加此包:


<PackageReference Include="Serilog.AspNetCore" Version="#version#" />

并将其添加到您的Program.cs:


WebHost.CreateDefaultBuilder(args)

                .UseStartup<Startup>()

                .UseSerilog(); //this line

然后你可以简单地ILogger<T>使用 DI 注入,它将使用 Serilog 与你的配置。此外,它还会封装您的 Serilog,以便以后更容易使用其他日志框架


更新:为了删除以前配置的提供程序,请尝试添加此行:


new WebHostBuilder()

.ConfigureLogging(builder => builder.ClearProviders()) // <--here


查看完整回答
反对 回复 2023-07-09
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

就我而言,我必须在Startup.cs/Configure()方法中从 Core 库设置 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



查看完整回答
反对 回复 2023-07-09
  • 2 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信