using AvaloniaSerilogNoDI.DataStores; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Serilog; using Serilog.Sinks.LogView.Core.Extensions; using System; using System.Drawing; using System.Globalization; using System.IO; namespace AvaloniaSerilogNoDI.Helpers; // application-wide DataStoreLogger Factory ... returns a wired up Logger instance public static class LoggingHelper { public static IConfigurationBuilder Initialize(this IConfigurationBuilder builder) { string env = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? "Production"; return builder .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env}.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables(); } #region Constructors static LoggingHelper() { IConfigurationRoot configuration = new ConfigurationBuilder() .Initialize() .Build(); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .WriteTo.DataStoreLoggerSink(dataStoreProvider: () => MainControlsDataStore.DataStore, options => { options.Colors[LogLevel.Trace] = new() { Foreground = Color.White, Background = Color.DarkGray }; options.Colors[LogLevel.Debug] = new() { Foreground = Color.White, Background = Color.Gray }; options.Colors[LogLevel.Information] = new() { Foreground = Color.White, Background = Color.DodgerBlue }; options.Colors[LogLevel.Warning] = new() { Foreground = Color.White, Background = Color.Orchid }; }, formatProvider: CultureInfo.InvariantCulture ) .CreateLogger(); // wire up the loggers Factory = LoggerFactory.Create(loggingBuilder => loggingBuilder.AddSerilog(Log.Logger)); } #endregion #region Properties public static ILoggerFactory Factory { get; } #endregion #region Methods public static void CloseAndFlush() => Log.CloseAndFlush(); #endregion }