From b6278c6b114c416aaa23b506369a95b7f617824e Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Thu, 10 Sep 2020 06:54:38 -0500 Subject: [PATCH] =?UTF-8?q?feat(logging):=20=E2=9C=A8=20add=20ApplicationI?= =?UTF-8?q?nsights=20sink?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/FilterLists.Archival.Api/Program.cs | 7 ++--- .../src/FilterLists.Directory.Api/Program.cs | 8 ++---- .../Configuration.cs | 15 ---------- .../ConfigurationBuilder.cs | 28 +++++++++++++++++++ .../FilterLists.SharedKernel.Logging.csproj | 1 + .../HostRunner.cs | 21 +++++++++++--- 6 files changed, 50 insertions(+), 30 deletions(-) delete mode 100644 services/sharedKernel/src/FilterLists.SharedKernel.Logging/Configuration.cs create mode 100644 services/sharedKernel/src/FilterLists.SharedKernel.Logging/ConfigurationBuilder.cs diff --git a/services/archival/src/FilterLists.Archival.Api/Program.cs b/services/archival/src/FilterLists.Archival.Api/Program.cs index d9b787ee9..1d014af62 100644 --- a/services/archival/src/FilterLists.Archival.Api/Program.cs +++ b/services/archival/src/FilterLists.Archival.Api/Program.cs @@ -10,11 +10,8 @@ public static class Program { public static async Task Main(string[] args) { - await TryRunWithLoggingAsync(async () => - { - var host = CreateHostBuilder(args).Build(); - await host.RunAsync(); - }); + var host = CreateHostBuilder(args).Build(); + await host.TryRunWithLoggingAsync(); } public static IHostBuilder CreateHostBuilder(string[] args) diff --git a/services/directory/src/FilterLists.Directory.Api/Program.cs b/services/directory/src/FilterLists.Directory.Api/Program.cs index 48360f51e..f48564678 100644 --- a/services/directory/src/FilterLists.Directory.Api/Program.cs +++ b/services/directory/src/FilterLists.Directory.Api/Program.cs @@ -11,12 +11,8 @@ public static class Program { public static async Task Main(string[] args) { - await TryRunWithLoggingAsync(async () => - { - var host = CreateHostBuilder(args).Build(); - await host.MigrateAsync(); - await host.RunAsync(); - }); + var host = CreateHostBuilder(args).Build(); + await host.TryRunWithLoggingAsync(async () => await host.MigrateAsync()); } public static IHostBuilder CreateHostBuilder(string[] args) diff --git a/services/sharedKernel/src/FilterLists.SharedKernel.Logging/Configuration.cs b/services/sharedKernel/src/FilterLists.SharedKernel.Logging/Configuration.cs deleted file mode 100644 index 304d884c5..000000000 --- a/services/sharedKernel/src/FilterLists.SharedKernel.Logging/Configuration.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Serilog; -using Serilog.Events; - -namespace FilterLists.SharedKernel.Logging -{ - internal static class Configuration - { - public static LoggerConfiguration LoggerConfiguration = new LoggerConfiguration() - .MinimumLevel.Debug() - .MinimumLevel.Override("Microsoft", LogEventLevel.Information) - .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning) - .Enrich.FromLogContext() - .WriteTo.Console(); - } -} \ No newline at end of file diff --git a/services/sharedKernel/src/FilterLists.SharedKernel.Logging/ConfigurationBuilder.cs b/services/sharedKernel/src/FilterLists.SharedKernel.Logging/ConfigurationBuilder.cs new file mode 100644 index 000000000..b7118b47a --- /dev/null +++ b/services/sharedKernel/src/FilterLists.SharedKernel.Logging/ConfigurationBuilder.cs @@ -0,0 +1,28 @@ +using Microsoft.ApplicationInsights; +using Microsoft.ApplicationInsights.Extensibility; +using Serilog; +using Serilog.Events; + +namespace FilterLists.SharedKernel.Logging +{ + internal static class ConfigurationBuilder + { + public static readonly LoggerConfiguration BaseLoggerConfiguration = + new LoggerConfiguration() + .MinimumLevel.Debug() + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning) + .Enrich.FromLogContext() + .WriteTo.Console(); + + public static LoggerConfiguration WriteToApplicationInsights( + this LoggerConfiguration loggerConfiguration, + TelemetryClient? telemetryClient = default) + { + var telemetryConverter = TelemetryConverter.Traces; + return telemetryClient != null + ? loggerConfiguration.WriteTo.ApplicationInsights(telemetryClient, telemetryConverter) + : loggerConfiguration.WriteTo.ApplicationInsights(TelemetryConfiguration.Active, telemetryConverter); + } + } +} \ No newline at end of file diff --git a/services/sharedKernel/src/FilterLists.SharedKernel.Logging/FilterLists.SharedKernel.Logging.csproj b/services/sharedKernel/src/FilterLists.SharedKernel.Logging/FilterLists.SharedKernel.Logging.csproj index afaf394b1..287a8f0b0 100644 --- a/services/sharedKernel/src/FilterLists.SharedKernel.Logging/FilterLists.SharedKernel.Logging.csproj +++ b/services/sharedKernel/src/FilterLists.SharedKernel.Logging/FilterLists.SharedKernel.Logging.csproj @@ -30,6 +30,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/services/sharedKernel/src/FilterLists.SharedKernel.Logging/HostRunner.cs b/services/sharedKernel/src/FilterLists.SharedKernel.Logging/HostRunner.cs index f57632e45..d50e5f60c 100644 --- a/services/sharedKernel/src/FilterLists.SharedKernel.Logging/HostRunner.cs +++ b/services/sharedKernel/src/FilterLists.SharedKernel.Logging/HostRunner.cs @@ -1,19 +1,32 @@ using System; using System.Threading.Tasks; +using Microsoft.ApplicationInsights; +using Microsoft.Extensions.Hosting; using Serilog; namespace FilterLists.SharedKernel.Logging { public static class HostRunner { - public static async Task TryRunWithLoggingAsync(Func runHostAsync) + public static async Task TryRunWithLoggingAsync(this IHost host, Func? runPreHostAsync = default) { - Log.Logger = Configuration.LoggerConfiguration.CreateLogger(); + _ = host ?? throw new ArgumentNullException(nameof(host)); + + var telemetryClient = (TelemetryClient)host.Services.GetService(typeof(TelemetryClient)); + Log.Logger = ConfigurationBuilder.BaseLoggerConfiguration + .WriteToApplicationInsights(telemetryClient) + .CreateLogger(); try { - Log.Information("Starting host"); - await runHostAsync(); + if (runPreHostAsync != null) + { + Log.Information("Initializing pre-host"); + await runPreHostAsync(); + } + + Log.Information("Initializing host"); + await host.RunAsync(); return 0; } catch (Exception ex)