StartupLoggerOfCategory.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. using System.Globalization;
  3. using Microsoft.Extensions.Logging;
  4. namespace Jellyfin.Server.ServerSetupApp;
  5. /// <summary>
  6. /// Startup logger for usage with DI that utilises an underlying logger from the DI.
  7. /// </summary>
  8. /// <typeparam name="TCategory">The category of the underlying logger.</typeparam>
  9. #pragma warning disable SA1649 // File name should match first type name
  10. public class StartupLogger<TCategory> : StartupLogger, IStartupLogger<TCategory>
  11. #pragma warning restore SA1649 // File name should match first type name
  12. {
  13. /// <summary>
  14. /// Initializes a new instance of the <see cref="StartupLogger{TCategory}"/> class.
  15. /// </summary>
  16. /// <param name="logger">The injected base logger.</param>
  17. public StartupLogger(ILogger<TCategory> logger) : base(logger)
  18. {
  19. }
  20. /// <summary>
  21. /// Initializes a new instance of the <see cref="StartupLogger{TCategory}"/> class.
  22. /// </summary>
  23. /// <param name="logger">The underlying base logger.</param>
  24. /// <param name="groupEntry">The group for this logger.</param>
  25. internal StartupLogger(ILogger logger, StartupLogTopic? groupEntry) : base(logger, groupEntry)
  26. {
  27. }
  28. IStartupLogger<TCategory> IStartupLogger<TCategory>.BeginGroup(FormattableString logEntry)
  29. {
  30. var startupEntry = new StartupLogTopic()
  31. {
  32. Content = logEntry.ToString(CultureInfo.InvariantCulture),
  33. DateOfCreation = DateTimeOffset.Now
  34. };
  35. if (Topic is null)
  36. {
  37. SetupServer.LogQueue?.Enqueue(startupEntry);
  38. }
  39. else
  40. {
  41. Topic.Children.Add(startupEntry);
  42. }
  43. return new StartupLogger<TCategory>(BaseLogger, startupEntry);
  44. }
  45. IStartupLogger<TCategory> IStartupLogger<TCategory>.With(ILogger logger)
  46. {
  47. return new StartupLogger<TCategory>(logger, Topic);
  48. }
  49. }