在 Microsoft.Extensions.DependencyInjection.AddLogging 扩展方法中使用 IServiceProvider

Use IServiceProvider in Microsoft.Extensions.DependencyInjection.AddLogging extension method

我有一个应用程序,我想在其中使用这样的配置文件配置 NLog

services.AddLogging(loggingBuilder =>
            {
                loggingBuilder
                    .ClearProviders()
                    .AddNLog(projectInfo.GetNLogConfigPath())
                    .AddFilter("Microsoft", LogLevel.Warning);
            })

但是我想从 DI 的单例服务中获取这个文件位置。我搜索了一个服务提供商,但我只找到了 loggingBuilder 服务集合(现在 projectInfo 是一个局部变量)。

有没有办法在 AddLogging 扩展方法操作中获取服务提供商?

您可以使用来自 NLog.Extensions.Logging

AddNLog() 扩展方法
services.AddLogging(loggingBuilder =>
   {
      loggingBuilder.ClearProviders();
      loggingBuilder.AddNLog(serviceProvider => {
         var config = serviceProvider.GetService(typeof(IConfiguration)) as IConfiguration;
         var filename = config["MyValues:Value1"].ToString();
         return NLog.LogManager.Setup().LoadConfigurationFromFile(filename).LogFactory;
      });
   })

那么你有这个 appsettings.json:

{ 
   "MyValues": {
      "Value1": "NLog.config"
   }
}

请注意,您也可以只使用 NLog-configuration in the appsettings.json