Asp.net-Mvc

我可以在 ASP.NET MVC 5(不是 mvc 核心)項目中使用 ILoggerFactory 嗎?

  • February 28, 2019

我想在我的 asp.net MVC 5 項目中創建一個日誌框架。我的 Startup 類如下所示:

public partial class Startup
{
   public void Configuration(IAppBuilder app)
   {
       ConfigureAuth(app);
   }
}

但是,當我查看 ASP.Net MVC Core 項目時,Startup 類是這樣的:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
   {
       loggerFactory.AddConsole(Configuration.GetSection("Logging"));
       loggerFactory.AddDebug();

是否可以在 MVC 5 中包含 ILoggerFactory?如果這是可能的,我應該如何初始化/註冊它?是否需要在 global.asax 或 Startup 中完成?

所有Microsoft.Extensions.*類型,包括日誌系統,都可以在 ASP.NET Core 之外使用。事實上,它們用於 Entity Framework Core,它不是 ASP.NET Core 的一部分。

要在任何應用程序中使用它,只需new設置您需要使用的類型並開始呼叫它們 - 它沒有什麼神奇之處。而且,當然,因為它不在 ASP.NET Core 應用程序中,所以您不會獲得自動依賴注入 (DI)(因為 ASP.NET Core 是用來連接的)。

在這種情況下,LoggerFactory直接使用可能是最簡單的方法以及由此產生的所有 API。

事實上,如果您查看 Logging 中許多類型的單元測試,它們的模式類似於您在不使用 DI 時所做的模式:

https://github.com/aspnet/Logging/blob/9f642fd125b723b0cd3bbfd7d6bb58f7daee233f/test/Microsoft.Extensions.Logging.Test/LoggerTest.cs#L114-L120

該程式碼創建一個記錄器工廠,添加一個記錄器提供程序(您可以使用控制台、事件日誌、自定義等),然後向其中記錄一條資訊消息:

       var loggerFactory = new LoggerFactory();
       var logger = loggerFactory.CreateLogger("Test");

       loggerFactory.AddProvider(new CustomLoggerProvider("provider1", ThrowExceptionAt.None, store));

       // Act
       logger.LogInformation("Hello");

引用自:https://stackoverflow.com/questions/46803813