84 lines
2.6 KiB
C#
84 lines
2.6 KiB
C#
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
|
|
} |