using System.Core.Extensions; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Serilog; using Serilog.Settings.Configuration; namespace Robin.Logging; public static class BuilderExtensions { public static IHostApplicationBuilder ClearProviders(this IHostApplicationBuilder builder) { builder.ThrowIfNull().Logging.ClearProviders(); return builder; } public static IHostApplicationBuilder AddSerilog(this IHostApplicationBuilder builder) { builder .ThrowIfNull() .Logging.ClearProviders() .AddSerilog( new LoggerConfiguration() .ReadFrom.Configuration( builder.Configuration, new ConfigurationReaderOptions( typeof(ConsoleLoggerConfigurationExtensions).Assembly ) { SectionName = "Serilog", } ) .Enrich.FromLogContext() .WriteTo.Console( outputTemplate: "[{Timestamp:yyyy-MM-dd HH:mm:ss}] {Level:u4}: [{SourceContext}]{NewLine}{Message:lj}{NewLine}{Exception}", theme: Serilog.Sinks.SystemConsole.Themes.SystemConsoleTheme.Colored ) .CreateLogger() ); return builder; } }