using System; using System.Globalization; using Microsoft.Extensions.Logging; namespace Jellyfin.Server.ServerSetupApp; /// /// Startup logger for usage with DI that utilises an underlying logger from the DI. /// /// The category of the underlying logger. #pragma warning disable SA1649 // File name should match first type name public class StartupLogger : StartupLogger, IStartupLogger #pragma warning restore SA1649 // File name should match first type name { /// /// Initializes a new instance of the class. /// /// The injected base logger. public StartupLogger(ILogger logger) : base(logger) { } /// /// Initializes a new instance of the class. /// /// The underlying base logger. /// The group for this logger. internal StartupLogger(ILogger logger, StartupLogTopic? groupEntry) : base(logger, groupEntry) { } IStartupLogger IStartupLogger.BeginGroup(FormattableString logEntry) { var startupEntry = new StartupLogTopic() { Content = logEntry.ToString(CultureInfo.InvariantCulture), DateOfCreation = DateTimeOffset.Now }; if (Topic is null) { SetupServer.LogQueue?.Enqueue(startupEntry); } else { Topic.Children.Add(startupEntry); } return new StartupLogger(BaseLogger, startupEntry); } IStartupLogger IStartupLogger.With(ILogger logger) { return new StartupLogger(logger, Topic); } }