feat: Avalonia logs sink to Microsoft.Logging

This commit is contained in:
2026-03-05 09:40:59 +03:00
parent d7c0883e6b
commit 4bf23c6993
2 changed files with 64 additions and 2 deletions
+61
View File
@@ -0,0 +1,61 @@
using Microsoft.Extensions.Logging;
using Avalonia.Logging;
public sealed class AvaloniaLogSink : ILogSink
{
private readonly ILoggerFactory _loggerFactory;
private readonly Dictionary<string, ILogger> _areaLoggers = new();
public AvaloniaLogSink(ILoggerFactory loggerFactory)
{
_loggerFactory = loggerFactory;
}
public bool IsEnabled(LogEventLevel level, string area) => true;
public void Log(LogEventLevel level, string area, object? source, string messageTemplate, params object?[] propertyValues)
{
if (!_areaLoggers.ContainsKey(area))
_areaLoggers.Add(area, _loggerFactory.CreateLogger($"Avalonia.{area}"));
var logger = _areaLoggers[area];
var logLevel = ConvertLogLevel(level);
logger.Log(logLevel, messageTemplate, propertyValues);
}
public void Log(LogEventLevel level, string area, object? source, string messageTemplate)
{
if (!_areaLoggers.ContainsKey(area))
_areaLoggers.Add(area, _loggerFactory.CreateLogger($"Avalonia.{area}"));
var logger = _areaLoggers[area];
var logLevel = ConvertLogLevel(level);
logger.Log(logLevel, messageTemplate);
}
public static LogLevel ConvertLogLevel(LogEventLevel level) =>
level switch
{
LogEventLevel.Verbose => LogLevel.Trace,
LogEventLevel.Debug => LogLevel.Debug,
LogEventLevel.Information => LogLevel.Information,
LogEventLevel.Warning => LogLevel.Warning,
LogEventLevel.Error => LogLevel.Error,
LogEventLevel.Fatal => LogLevel.Critical,
_ => LogLevel.Information
};
public static LogEventLevel ConvertLogLevel(LogLevel level) =>
level switch
{
LogLevel.Trace => LogEventLevel.Verbose,
LogLevel.Debug => LogEventLevel.Debug,
LogLevel.Information => LogEventLevel.Information,
LogLevel.Warning => LogEventLevel.Warning,
LogLevel.Error => LogEventLevel.Error,
LogLevel.Critical => LogEventLevel.Fatal,
_ => LogEventLevel.Information
};
}