SpectreConsoleLogger.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using Microsoft.Extensions.Logging;
  2. using Spectre.Console;
  3. namespace RackPeek.Spectre;
  4. public class SpectreConsoleLogger : ILogger
  5. {
  6. public IDisposable BeginScope<T>(T state)
  7. {
  8. return null!;
  9. }
  10. public bool IsEnabled(LogLevel logLevel)
  11. {
  12. return true;
  13. }
  14. public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception,
  15. Func<TState, Exception, string> formatter)
  16. {
  17. var message = formatter(state, exception);
  18. var style = GetStyle(logLevel);
  19. AnsiConsole.MarkupLine($"[{style}] {message}[/]");
  20. }
  21. private Style GetStyle(LogLevel logLevel)
  22. {
  23. return logLevel switch
  24. {
  25. LogLevel.Trace => new Style(Color.Grey),
  26. LogLevel.Debug => new Style(Color.Grey),
  27. LogLevel.Information => new Style(Color.Green),
  28. LogLevel.Warning => new Style(Color.Yellow),
  29. LogLevel.Error => new Style(Color.Red),
  30. LogLevel.Critical => new Style(Color.Red),
  31. _ => new Style(Color.White)
  32. };
  33. }
  34. }