XUnitLoggerProvider.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using Microsoft.Extensions.Logging;
  2. using Xunit.Abstractions;
  3. namespace Tests;
  4. public sealed class XUnitLoggerProvider : ILoggerProvider
  5. {
  6. private readonly ITestOutputHelper _output;
  7. public XUnitLoggerProvider(ITestOutputHelper output)
  8. {
  9. _output = output;
  10. }
  11. public ILogger CreateLogger(string categoryName)
  12. {
  13. return new XUnitLogger(_output, categoryName);
  14. }
  15. public void Dispose()
  16. {
  17. }
  18. private sealed class XUnitLogger : ILogger
  19. {
  20. private readonly string _category;
  21. private readonly ITestOutputHelper _output;
  22. public XUnitLogger(ITestOutputHelper output, string category)
  23. {
  24. _output = output;
  25. _category = category;
  26. }
  27. public IDisposable BeginScope<TState>(TState state)
  28. {
  29. return null!;
  30. }
  31. public bool IsEnabled(LogLevel logLevel)
  32. {
  33. return true;
  34. }
  35. public void Log<TState>(LogLevel logLevel, EventId eventId,
  36. TState state, Exception? exception, Func<TState, Exception?, string> formatter)
  37. {
  38. _output.WriteLine($"[{logLevel}] {_category}: {formatter(state, exception)}");
  39. }
  40. }
  41. }