mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
61 lines
2.2 KiB
C#
61 lines
2.2 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
using System.Runtime.CompilerServices;
|
|
using Avalonia.Logging;
|
|
using Serilog;
|
|
using AvaloniaLogLevel = Avalonia.Logging.LogEventLevel;
|
|
using SerilogLogLevel = Serilog.Events.LogEventLevel;
|
|
|
|
namespace Artemis.UI;
|
|
|
|
[SuppressMessage("ReSharper", "TemplateIsNotCompileTimeConstantProblem")]
|
|
public class SerilogAvaloniaSink : ILogSink
|
|
{
|
|
private readonly ILogger _logger;
|
|
|
|
public SerilogAvaloniaSink(ILogger logger)
|
|
{
|
|
_logger = logger;
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public bool IsEnabled(AvaloniaLogLevel level, string area)
|
|
{
|
|
SerilogLogLevel logLevel = GetSerilogLogLevel(level, area);
|
|
|
|
#if DEBUG
|
|
// Except with binding errors, ignore anything that is information or lower
|
|
return true;
|
|
#else
|
|
// Ignore binding errors in release builds, shoo
|
|
return area != "Binding" && logLevel > SerilogLogLevel.Information && _logger.IsEnabled(logLevel);
|
|
#endif
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public void Log(AvaloniaLogLevel level, string area, object? source, string messageTemplate)
|
|
{
|
|
SerilogLogLevel logLevel = GetSerilogLogLevel(level, area);
|
|
|
|
ILogger logger = source != null ? _logger.ForContext(source.GetType()) : _logger;
|
|
logger.Write(logLevel, messageTemplate);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public void Log(AvaloniaLogLevel level, string area, object? source, string messageTemplate, params object?[] propertyValues)
|
|
{
|
|
SerilogLogLevel logLevel = GetSerilogLogLevel(level, area);
|
|
|
|
ILogger logger = source != null ? _logger.ForContext(source.GetType()) : _logger;
|
|
logger.Write(logLevel, messageTemplate, propertyValues);
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
private static SerilogLogLevel GetSerilogLogLevel(AvaloniaLogLevel level, string area)
|
|
{
|
|
// Avalonia considers binding errors warnings, we'll treat them Verbose as to not spam people's logs
|
|
// And yes we should fix them instead but we can't always: https://github.com/AvaloniaUI/Avalonia/issues/5762
|
|
if (area == "Binding")
|
|
return SerilogLogLevel.Verbose;
|
|
return (SerilogLogLevel) level;
|
|
}
|
|
} |