1

我正在尝试在控制台应用程序中启用 Application Insights IHostedService(目前,它是一个简单的控制台应用程序,我们作为 WebJob 运行,将来在容器中运行)。

据我所知,在以下代码中,到目前为止,我们没有任何扩展来将全局 Application Insights 注册为以下代码的实现ILogger

  public static class Program
    {
        public static Task Main(string[] args)
        {
            var hostBuilder = new HostBuilder()
                .ConfigureHostConfiguration(config =>
                {
                    config.SetBasePath(Directory.GetCurrentDirectory());
                    config.AddJsonFile("appsettings.json", optional: false);
                    config.AddEnvironmentVariables();
                })
                .ConfigureLogging((context, logging) =>
                {
                    logging.AddConfiguration(context.Configuration.GetSection("Logging"));

                    if (context.HostingEnvironment.IsDevelopment())
                    {
                        logging.AddConsole();
                    }
                    else
                    {
                        //TODO: register ApplicationInsights
                    }
                });

            return hostBuilder.RunConsoleAsync();
        }
    }

到目前为止,我发现可能我应该能够使用记录器的自定义实现来设置所有内容,即public class ApplicationInsightsLogger : ILogger,然后...将它注册到容器中,以便 DI 解决它。

这是正确的方向吗?

4

1 回答 1

0

我做了一个扩展,我可以从 anIHost或 an 使用IWebHost

using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.ApplicationInsights;

public static class LoggingBuilderExtensions
{
    public static ILoggingBuilder AddLogging(this ILoggingBuilder loggingBuilder)
    {
        loggingBuilder.AddFilter<ApplicationInsightsLoggerProvider>("", LogLevel.Trace);
        loggingBuilder.AddAzureWebAppDiagnostics();
        loggingBuilder.AddApplicationInsights();
        return loggingBuilder;
    }
}

由于我没有在上下文(HostBuilderContextWebHostBuilderContext)中发送,因此我可以在任何一种应用程序类型中使用它,如下所示:

new HostBuilder().ConfigureLogging(loggingBuilder => loggingBuilder.AddLogging())

或者

WebHost.CreateDefaultBuilder().ConfigureLogging(loggingBuilder => loggingBuilder.AddLogging())

如果您需要上下文中的特定属性(如环境类型),您可以提取该属性并将其作为参数发送到扩展。

这是一个参考:https ://github.com/Microsoft/ApplicationInsights-dotnet-logging/blob/develop/src/ILogger/Readme.md

于 2019-02-26T11:30:01.383 回答