Files
LogViewerControl/CSharp/Applications/AvaloniaSerilogNoDI/Helpers/LoggingHelper.cs
T

84 lines
2.5 KiB
C#
Raw Normal View History

2026-04-04 13:30:13 +02:00
using AvaloniaSerilogNoDI.DataStores;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Sinks.LogView.Core;
2026-04-05 08:14:33 +02:00
using System;
2026-04-04 13:30:13 +02:00
using System.Drawing;
2026-04-04 15:36:30 +02:00
using System.Globalization;
2026-04-05 08:14:33 +02:00
using System.IO;
2026-04-04 13:30:13 +02:00
namespace AvaloniaSerilogNoDI.Helpers;
2026-04-05 08:14:33 +02:00
2026-04-04 13:30:13 +02:00
// application-wide DataStoreLogger Factory ... returns a wired up Logger instance
public static class LoggingHelper
{
2026-04-05 08:14:33 +02:00
public static IConfigurationBuilder Initialize(this IConfigurationBuilder builder)
{
string env = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? "Production";
2026-04-04 13:30:13 +02:00
2026-04-05 08:14:33 +02:00
return builder
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
}
#region Constructors
2026-04-04 13:30:13 +02:00
static LoggingHelper()
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.Initialize()
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
2026-04-04 15:36:30 +02:00
.WriteTo.DataStoreLoggerSink(dataStoreProvider: () => MainControlsDataStore.DataStore,
2026-04-04 13:30:13 +02:00
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
};
2026-04-04 15:36:30 +02:00
}, formatProvider: CultureInfo.InvariantCulture
2026-04-04 13:30:13 +02:00
)
.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
}