Newer
Older
Warehouse / src / WebApi / Logging / LoggingStartup.cs
@Derek Comartin Derek Comartin on 22 Aug 2023 1 KB Init
using MyWarehouse.WebApi.Logging.Helper;
using MyWarehouse.WebApi.Logging.Settings;
using MyWarehouse.Infrastructure;
using Serilog;
using Serilog.Events;

namespace MyWarehouse.WebApi.Logging;

[ExcludeFromCodeCoverage]
internal static class LoggingStartup
{
    public static IHostBuilder AddMySerilogLogging(this IHostBuilder webBuilder)
    {
        return webBuilder.UseSerilog((context, loggerCfg) =>
        {
            loggerCfg
                .MinimumLevel.Information()
                .Enrich.FromLogContext()
                .Enrich.WithProperty("EnvironmentName", context.HostingEnvironment.EnvironmentName)
                .Enrich.WithMachineName();

            if (context.HostingEnvironment.IsDevelopment())
            {
                loggerCfg
                .WriteTo.Console()
                .WriteTo.Debug();
            }
            else
            {
                loggerCfg
                .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
                .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Error);
            }

            var logglySettings = context.Configuration.GetMyOptions<LogglySettings>();
            if (logglySettings.WriteToLoggly.GetValueOrDefault() == true)
            {
                loggerCfg.WriteTo.Loggly(
                    customerToken: logglySettings.CustomerToken);
            }
        });
    }

    /// <summary>
    /// Adds Serilog request logging to the request processing pipeline.
    /// Call it early in the pipeline to capture as much as possible.
    /// </summary>
    public static IApplicationBuilder UseMyRequestLogging(this IApplicationBuilder appBuilder)
    {
        return appBuilder
            // Log requests
            .UseSerilogRequestLogging(
                // Don't log health check endpoints
                opts => opts.GetLevel = LogHelper.ExcludeHealthChecks);
    }
}