【问题标题】:Use logging in ConfigureAppConfiguration method in ASP.NET Core在 ASP.NET Core 的 ConfigureAppConfiguration 方法中使用日志记录
【发布时间】:2019-12-11 00:54:37
【问题描述】:

我在ConfigureAppConfiguration 方法中有特定代码我想在这里添加一些日志我尝试在下面编写代码但它失败了我该如何解决这个问题?或者有没有其他方法可以登录这个方法:

public static IWebHostBuilder AddKeyVault(this IWebHostBuilder builder)
{
    return builder.ConfigureAppConfiguration(
        (context, config) =>
        {
            var loggerFactory = builder.Build().Services.GetRequiredService<ILoggerFactory>(); // code fails here
            var logger = loggerFactory.CreateLogger(typeof(WebHostBuilderCustomExtension));
            //  if (context.HostingEnvironment.IsProduction())
            {
                var cert = new X509Certificate2(File.ReadAllBytes("keyvaultcertificate.pfx"));
            
                var builtConfig = config.Build();
                
                config.AddAzureKeyVault(builtConfig["vaultname"], "8c372a04-8578-4c38-a58d-a821d85212cb",cert);
                logger.LogInformation($"connected to key vault {builtConfig["azure.keyvault.uri"]}");
            }

        });
}

运行此代码时出现以下错误:

这是调用此方法的方式:

return WebHost.CreateDefaultBuilder(args).AddKeyVault()
    .UseStartup<Startup>();

【问题讨论】:

  • 它失败了如何
  • 如果您说“失败”或“出现错误”之类的内容,则应立即且始终紧随其后的是对问题和/或异常和堆栈跟踪的描述。
  • 你是怎么打电话给return builder.ConfigureAppConfiguration的?与我们分享您当前的 program.cs。您的第一部分和最后一部分代码之间的关系是什么?
  • @TaoZhou program.cs 仅包含最后一部分代码,我更新了第一部分代码,它位于我创建的扩展方法 AddKeyVault() 下

标签: c# asp.net-core .net-core


【解决方案1】:

对于IWebHostBuilder,您无法按照错误指示构建两次。

对于ServiceCollection,您将无法在构建主机之前访问ILoggerFactory等服务。

对于解决方法,您需要手动初始化自己的ILoggerFactory

public static class WebHostBuilderCustomExtension
{
    public static IWebHostBuilder AddKeyVault(this IWebHostBuilder builder)
    {
        return builder.ConfigureAppConfiguration(
                        (context, config) =>
                        {
                            var loggerFactory = new LoggerFactory(); 
                            loggerFactory.AddConsole();
                            var logger = loggerFactory.CreateLogger(typeof(WebHostBuilderCustomExtension));
                            logger.LogInformation($"connected to key vault ");
                        });
    }
}

【讨论】:

  • loggerFactory.AddConsole();给出过时的警告如何处理?
  • @ankush loggerFactory.AddConsole();是一个演示代码,用于添加ConsoleLoggerProvider,添加你自己的loggerProvider。
猜你喜欢
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
相关资源
最近更新 更多