mirror of
https://github.com/claunia/romrepomgr.git
synced 2025-12-16 11:14:45 +00:00
53 lines
2.1 KiB
C#
53 lines
2.1 KiB
C#
#nullable enable
|
|
using System.Collections.Generic;
|
|
using Avalonia.Logging;
|
|
|
|
namespace RomRepoMgr;
|
|
|
|
public class SerilogSink(LogEventLevel minimumLevel, IList<string>? areas = null) : ILogSink
|
|
{
|
|
private readonly IList<string>? _areas = areas?.Count > 0 ? areas : null;
|
|
|
|
public bool IsEnabled(LogEventLevel level, string area) =>
|
|
level >= minimumLevel && (_areas?.Contains(area) ?? true);
|
|
|
|
public void Log(LogEventLevel level, string area, object? source, string messageTemplate)
|
|
{
|
|
if(IsEnabled(level, area))
|
|
{
|
|
Serilog.Log.Write(LogLevelToSerilogLevel(level),
|
|
"[{Area} {Source}] {MessageTemplate}",
|
|
area,
|
|
source,
|
|
messageTemplate);
|
|
}
|
|
}
|
|
|
|
public void Log(LogEventLevel level, string area, object? source, string messageTemplate,
|
|
params object?[] propertyValues)
|
|
{
|
|
if(IsEnabled(level, area))
|
|
{
|
|
Serilog.Log.Write(LogLevelToSerilogLevel(level),
|
|
"[{Area} {Source}] {MessageTemplate}",
|
|
propertyValues,
|
|
area,
|
|
source,
|
|
messageTemplate);
|
|
}
|
|
}
|
|
|
|
private static Serilog.Events.LogEventLevel LogLevelToSerilogLevel(LogEventLevel level)
|
|
{
|
|
return level switch
|
|
{
|
|
LogEventLevel.Verbose => Serilog.Events.LogEventLevel.Verbose,
|
|
LogEventLevel.Debug => Serilog.Events.LogEventLevel.Debug,
|
|
LogEventLevel.Information => Serilog.Events.LogEventLevel.Information,
|
|
LogEventLevel.Warning => Serilog.Events.LogEventLevel.Warning,
|
|
LogEventLevel.Error => Serilog.Events.LogEventLevel.Error,
|
|
LogEventLevel.Fatal => Serilog.Events.LogEventLevel.Fatal,
|
|
_ => Serilog.Events.LogEventLevel.Verbose
|
|
};
|
|
}
|
|
} |