feat(logging): add ApplicationInsights sink

This commit is contained in:
Collin M. Barrett 2020-09-10 06:54:38 -05:00
parent fe84b49c1d
commit b6278c6b11
6 changed files with 50 additions and 30 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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();
}
}

View file

@ -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);
}
}
}

View file

@ -30,6 +30,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Serilog.AspNetCore" Version="3.4.0" />
<PackageReference Include="Serilog.Sinks.ApplicationInsights" Version="3.1.0" />
</ItemGroup>
</Project>

View file

@ -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<int> TryRunWithLoggingAsync(Func<Task> runHostAsync)
public static async Task<int> TryRunWithLoggingAsync(this IHost host, Func<Task>? 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)