在 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。
我有一个应用程序,我想在其中使用这样的配置文件配置 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。