我正在使用 Azure 应用程序配置,并使用启用了轮询模型的动态配置,如所述 here 。我的目标是在配置重新加载因任何原因失败时记录一条错误消息,例如不正确的 key 保管库引用。以下是将 Azure 应用程序配置添加为配置源的方法。
public static IConfigurationBuilder AddAppConfiguration(IConfigurationBuilder configurationBuilder, IEnumerable<string> filters)
{
if (!configurationBuilder.Sources.Any())
{
configurationBuilder.AddDefaultConfigurationSources();
}
var configuration = configurationBuilder.Build();
var appConfiguration = configuration.GetSection(AppConfiguration.ConfigurationKey)
.Get<AppConfiguration>();
if (appConfiguration?.IsEnabled == true)
{
if (appConfiguration.IsRedundancyEnabled)
configurationBuilder.AddAzureAppConfiguration(
options =>
{
ConfigureAppConfiguration(options, appConfiguration, appConfiguration.UrlSecondary, filters, appConfiguration.Label);
}, true);
configurationBuilder.AddAzureAppConfiguration(
options => { ConfigureAppConfiguration(options, appConfiguration, appConfiguration.Url, filters, appConfiguration.Label); },
true);
}
return configurationBuilder;
}
请注意,AddAzureAppConfiguration
中的可选
参数设置为true
。这意味着如果配置刷新失败,应用程序不会崩溃,并且只会继续使用旧设置运行,我想保留这种行为。
如果配置没有像这样更改,我尝试使用 ChangeToken 来记录错误:
configuration.GetReloadToken().RegisterChangeCallback(state =>
{
var reloadToken = state as IChangeToken;
if (reloadToken.HasChanged)
{
logger.Information("Configuration refresh successful");
}
else
{
logger.Error("Configuration refresh failed");
}
RegisterCallback(logger, configuration);
}, configuration.GetReloadToken());
但是只有当配置确实发生变化时才会真正调用回调😅,至少我没有设法让它失败并记录错误。
最佳答案
如上所述here ,当通过 DI 在 ConfigureServices()
方法中调用 services.AddAzureAppConfiguration()
时,将自动添加默认的 ILoggerFactory。我没有看到日志,因为 Microsoft 最低日志级别设置为错误,而如果 TryRefreshAsync()
方法失败,AzureAppConfigurationProvider 会记录警告。
关于c# - Azure 应用程序配置重新加载失败时如何记录错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75295508/