Информация о приложении в консольном приложении IHostedService
Я пытаюсь включить 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 разрешил его.
Это правильное направление?
0 ответов
Я сделал расширение, которое я мог бы использовать либо из IHost
или 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;
}
}
Так как я не отправляю в контексте (HostBuilderContext
или же WebHostBuilderContext
), Я могу использовать его в любом типе приложения, например:
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