c# - Azure 应用程序配置重新加载失败时如何记录错误

标签 c# azure logging configuration azure-app-configuration

我正在使用 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/

相关文章:

c# - 单元测试不返回值的函数

c# - 获取当前事件的应用程序名称

python - Azure Functions for python、结构化日志记录到 Application Insights?

tomcat - 在 Apache Tomcat 中使用 Log4j 进行 Mule 日志记录

c# - 简单的减法和铸题

C#:如何在对象类型转换期间使用隐式强制转换运算符?

c# - 无法在 Azure 门户中查看通过 Visual Studio 创建/部署的函数的代码,但当我通过门户创建函数时可以查看代码

azure - 将客户端应用程序路由到不同端口后端 IIS 10

linux - 为什么日志文件的扩展名为 swp?

go - 如何将日志写入多个文件?