亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 195 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號