【问题标题】:How to access Log4Net after adding it to Dependency Injection将Log4Net添加到依赖注入后如何访问
【发布时间】:2021-09-28 03:46:04
【问题描述】:

这是我第一次与Microsoft.Extensions.Logging.Log4Net.AspNetCore合作。

我有一个 WPF 应用程序,我在 App.xaml.csApp 方法中的 CreateDefaultBuilder 中添加了 Log4Net 提供程序。紧接着,我想使用LogInformation 写入日志文件,说“正在启动应用程序”。据我所知,由于它已添加到依赖注入容器中的方式,我似乎无法做到这一点。我必须要么调用访问参数列表中的 DI 容器的方法,要么将 Log4Net 添加到 ServiceProvider,然后以这种方式检索服务。但是,这似乎不对,因为我实际上会将 Log4Net 添加到 DI 中两次。

有没有办法在配置 Log4Net 后立即访问 DI 容器,以便我可以写入日志文件?

Host = Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder()
.ConfigureAppConfiguration((context, appBuilder) =>
{
   // Do some stuff here    
}).ConfigureLogging(logBuilder =>
{
   logBuilder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
   logBuilder.AddLog4Net("log4net.config");
})
.ConfigureServices((context, services) =>
{      
   Configuration = context.Configuration;

   ConfigureServices(Configuration, services);
})
.Build();

ServiceProvider = Host.Services;

// How to access Log4Net here?
_ISomeLogger.LogInformation("Starting Application");

更新

我正在使用以下示例:https://www.thecodebuzz.com/logging-using-log4net-net-core-console-application/

【问题讨论】:

  • 我没有把 WPF 和 ASP.Net 放在一起?在 Asp.Net Core 应用程序中,您现在可以将 ILogger 注入您的类(服务、控制器等)并使用它。
  • @Ralf 查看更新后的问题。我正在使用我在网站上找到的示例。我也同意使用来自不同框架的类似乎违反直觉。但是,我之前在将 AddAzureKeyVault 添加到 WPF 应用程序以在 Azure 虚拟机中托管时已经这样做了。
  • 您的容器配置了对 build() 的调用。因此,从您拥有的 ServiceProvider 检索记录器是您可以记录的最早时间。
  • logger = ServiceProvider.GetService<ILogger>(); logger.LogInformation("Starting Application");
  • 返回 Null。但是,你很接近。它必须是logger = (ILogger<Program>)ServiceProvider.GetService(typeof(ILogger<Program>)); 我可以发誓我早点尝试过,但它没有用。我想我错过了类型转换。无论如何,这行得通。如果您将其发布为答案,我将接受它。谢谢。

标签: c# wpf dependency-injection log4net .net-5


【解决方案1】:

解决方案是在构建后立即从ServiceProvider 访问Log4Net

logger = (ILogger<Program>)ServiceProvider.GetService(typeof(ILogger<Program>));

【讨论】:

  • 真的需要第一次演员吗?
  • 不,我只是按照惯例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 2018-05-06
  • 2017-08-22
相关资源
最近更新 更多