自定义配置提供程序(inMemoryDatabase)中的 LogSettings 不工作

问题描述 投票:0回答:0

我使用内存数据库作为配置提供程序。我添加了带有 id、key 和 value 列的表,并在 ConfigurationProvider 的 Load 函数中为它们分配了值。

public override void Load()
        {
            this.Data = new Dictionary<string, string?>()
            {
                {"Logging__Console__LogLevel__Default","Trace"}
            };

            using (var db = new ConfigurationDbContext(this._connectionString))
            {
                db.Database.EnsureCreated();
                if (!db.RevisionOption.Any())
                {
                    foreach (var data in Data)
                    {
                        db.RevisionOption.Add(new RevisionConfigurationOption()
                        {
                            Key = data.Key,
                            Value = data.Value ?? "None"
                        });
                    }
                    db.SaveChanges();
                }

                foreach (var data in db.RevisionOption)
                {
                    this.Data.Clear();
                    this.Data.Add(data.Key, data.Value);
                }
            }
        }

我已经在 IConfigurationSource 中添加了提供者

public IConfigurationProvider Build(IConfigurationBuilder builder)
{
    return new RevisionProvider(this._connectionString);
}

在扩展方法中,我已将 Source 添加到 IConfiburationBuilder

public static IConfigurationBuilder AddCustomConfiguration(this IConfigurationBuilder builder)
{
    var currentConfiguration = builder.Build();
    var connectionString = currentConfiguration.GetConnectionString("configurationConnectionString");
    builder.Add(new RevisionSource(connectionString));
    return builder;
}

在 Program.cs 中我调用了这样的方法

var configuration = new ConfigurationBuilder()
//.AddEnvironmentVariables()
.AddJsonFile($"appsettings{(string.IsNullOrWhiteSpace(environmentName) ? string.Empty : "." + environmentName)}.json")
.AddCustomConfiguration()
.Build();

接下来我创建了一个 ServiceCollection 对象并尝试添加控制台记录器

var serviceProvider = new ServiceCollection()
.AddLogging(loggingBuilder =>
{
    loggingBuilder.ClearProviders()
    .AddConfiguration(configuration.GetSection("Logging"))
    .AddConsole();
})
.BuildServiceProvider();

var logger = serviceProvider.GetRequiredService<ILogger<Program>>();
logger.LogDebug("hello");

问题是,如果我将键值对添加为环境变量 {"Logging__Console__LogLevel__Default","Trace"}

然后就可以了。日志写入终端。但是使用自定义 ConfigurationProvider 它不会。

.net logging custom-configuration
© www.soinside.com 2019 - 2024. All rights reserved.