diff options
| -rw-r--r-- | MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs | 20 | ||||
| -rw-r--r-- | MediaBrowser.Common.Implementations/BaseApplicationHost.cs | 41 | ||||
| -rw-r--r-- | MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerTask.cs | 23 | ||||
| -rw-r--r-- | MediaBrowser.Common/Kernel/BaseKernel.cs | 24 | ||||
| -rw-r--r-- | MediaBrowser.Common/Kernel/IApplicationHost.cs | 11 | ||||
| -rw-r--r-- | MediaBrowser.Common/Kernel/IKernel.cs | 10 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Kernel.cs | 9 | ||||
| -rw-r--r-- | MediaBrowser.Logging.NLog/NlogManager.cs | 114 | ||||
| -rw-r--r-- | MediaBrowser.Model/Logging/ILogManager.cs | 33 | ||||
| -rw-r--r-- | MediaBrowser.Model/MediaBrowser.Model.csproj | 1 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/ApplicationHost.cs | 72 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/MainWindow.xaml.cs | 23 |
12 files changed, 254 insertions, 127 deletions
diff --git a/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs b/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs index e0879d924..2480b2af8 100644 --- a/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs +++ b/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs @@ -26,20 +26,18 @@ namespace MediaBrowser.Api.WebSocket /// <summary> /// The _kernel /// </summary> - private readonly IApplicationHost _appHost; - private readonly IKernel _kernel; - + private readonly ILogManager _logManager; + /// <summary> /// Initializes a new instance of the <see cref="LogFileWebSocketListener" /> class. /// </summary> /// <param name="logger">The logger.</param> - /// <param name="kernel">The kernel.</param> - public LogFileWebSocketListener(ILogger logger, IApplicationHost host, IKernel kernel) + /// <param name="logManager">The log manager.</param> + public LogFileWebSocketListener(ILogger logger, ILogManager logManager) : base(logger) { - _appHost = host; - _kernel = kernel; - kernel.LoggerLoaded += kernel_LoggerLoaded; + _logManager = logManager; + _logManager.LoggerLoaded += kernel_LoggerLoaded; } /// <summary> @@ -49,9 +47,9 @@ namespace MediaBrowser.Api.WebSocket /// <returns>IEnumerable{System.String}.</returns> protected override async Task<IEnumerable<string>> GetDataToSend(LogFileWebSocketState state) { - if (!string.Equals(_appHost.LogFilePath, state.LastLogFilePath)) + if (!string.Equals(_logManager.LogFilePath, state.LastLogFilePath)) { - state.LastLogFilePath = _appHost.LogFilePath; + state.LastLogFilePath = _logManager.LogFilePath; state.StartLine = 0; } @@ -70,7 +68,7 @@ namespace MediaBrowser.Api.WebSocket { if (dispose) { - _kernel.LoggerLoaded -= kernel_LoggerLoaded; + _logManager.LoggerLoaded -= kernel_LoggerLoaded; } base.Dispose(dispose); } diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index f5855bf75..eeef6225d 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -1,6 +1,7 @@ using System.IO; using System.Linq; using System.Reflection; +using MediaBrowser.Common.Kernel; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; using SimpleInjector; @@ -19,6 +20,18 @@ namespace MediaBrowser.Common.Implementations public ILogger Logger { get; protected set; } /// <summary> + /// Gets or sets the log manager. + /// </summary> + /// <value>The log manager.</value> + public ILogManager LogManager { get; protected set; } + + /// <summary> + /// Gets the application paths. + /// </summary> + /// <value>The application paths.</value> + protected IApplicationPaths ApplicationPaths { get; private set; } + + /// <summary> /// The container /// </summary> protected readonly Container Container = new Container(); @@ -46,6 +59,12 @@ namespace MediaBrowser.Common.Implementations protected readonly List<IDisposable> DisposableParts = new List<IDisposable>(); /// <summary> + /// Gets a value indicating whether this instance is first run. + /// </summary> + /// <value><c>true</c> if this instance is first run; otherwise, <c>false</c>.</value> + public bool IsFirstRun { get; private set; } + + /// <summary> /// The _protobuf serializer initialized /// </summary> private bool _protobufSerializerInitialized; @@ -82,6 +101,16 @@ namespace MediaBrowser.Common.Implementations protected BaseApplicationHost() { FailedAssemblies = new List<string>(); + + ApplicationPaths = GetApplicationPaths(); + + LogManager = GetLogManager(); + + Logger = LogManager.GetLogger("App"); + + IsFirstRun = !File.Exists(ApplicationPaths.SystemConfigurationFilePath); + + DiscoverTypes(); } /// <summary> @@ -91,6 +120,18 @@ namespace MediaBrowser.Common.Implementations protected abstract IEnumerable<Assembly> GetComposablePartAssemblies(); /// <summary> + /// Gets the log manager. + /// </summary> + /// <returns>ILogManager.</returns> + protected abstract ILogManager GetLogManager(); + + /// <summary> + /// Gets the application paths. + /// </summary> + /// <returns>IApplicationPaths.</returns> + protected abstract IApplicationPaths GetApplicationPaths(); + + /// <summary> /// Discovers the types. /// </summary> protected void DiscoverTypes() diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerTask.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerTask.cs index ac06f111a..ea1e8b938 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerTask.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerTask.cs @@ -14,25 +14,32 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks public class ReloadLoggerFileTask : IScheduledTask { /// <summary> - /// Gets or sets the kernel. + /// Gets or sets the log manager. /// </summary> - /// <value>The kernel.</value> - private IKernel Kernel { get; set; } + /// <value>The log manager.</value> + private ILogManager LogManager { get; set; } /// <summary> /// Gets or sets the logger. /// </summary> /// <value>The logger.</value> private ILogger Logger { get; set; } + /// <summary> + /// Gets or sets the kernel. + /// </summary> + /// <value>The kernel.</value> + private IKernel Kernel { get; set; } /// <summary> /// Initializes a new instance of the <see cref="ReloadLoggerFileTask" /> class. /// </summary> - /// <param name="kernel">The kernel.</param> + /// <param name="logManager">The logManager.</param> /// <param name="logger">The logger.</param> - public ReloadLoggerFileTask(IKernel kernel, ILogger logger) + /// <param name="kernel">The kernel.</param> + public ReloadLoggerFileTask(ILogManager logManager, ILogger logger, IKernel kernel) { - Kernel = kernel; + LogManager = logManager; Logger = logger; + Kernel = kernel; } /// <summary> @@ -57,8 +64,8 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks cancellationToken.ThrowIfCancellationRequested(); progress.Report(0); - - return Task.Run(() => Kernel.ReloadLogger()); + + return Task.Run(() => LogManager.ReloadLogger(Kernel.Configuration.EnableDebugLevelLogging ? LogSeverity.Debug : LogSeverity.Info)); } /// <summary> diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs index 2ec1dd829..184cef98b 100644 --- a/MediaBrowser.Common/Kernel/BaseKernel.cs +++ b/MediaBrowser.Common/Kernel/BaseKernel.cs @@ -42,20 +42,6 @@ namespace MediaBrowser.Common.Kernel } #endregion - #region LoggerLoaded Event - /// <summary> - /// Fires whenever the logger is loaded - /// </summary> - public event EventHandler LoggerLoaded; - /// <summary> - /// Called when [logger loaded]. - /// </summary> - private void OnLoggerLoaded() - { - EventHelper.QueueEventIfNotNull(LoggerLoaded, this, EventArgs.Empty, Logger); - } - #endregion - #region ReloadBeginning Event /// <summary> /// Fires whenever the kernel begins reloading @@ -278,16 +264,6 @@ namespace MediaBrowser.Common.Kernel } /// <summary> - /// Disposes and reloads all loggers - /// </summary> - public void ReloadLogger() - { - ApplicationHost.ReloadLogger(); - - OnLoggerLoaded(); - } - - /// <summary> /// Composes the parts with ioc container. /// </summary> protected virtual void FindParts() diff --git a/MediaBrowser.Common/Kernel/IApplicationHost.cs b/MediaBrowser.Common/Kernel/IApplicationHost.cs index 1f99d10db..42ba2fbbb 100644 --- a/MediaBrowser.Common/Kernel/IApplicationHost.cs +++ b/MediaBrowser.Common/Kernel/IApplicationHost.cs @@ -17,23 +17,12 @@ namespace MediaBrowser.Common.Kernel void Restart(); /// <summary> - /// Reloads the logger. - /// </summary> - void ReloadLogger(); - - /// <summary> /// Gets the application version. /// </summary> /// <value>The application version.</value> Version ApplicationVersion { get; } /// <summary> - /// Gets the log file path. - /// </summary> - /// <value>The log file path.</value> - string LogFilePath { get; } - - /// <summary> /// Gets or sets a value indicating whether this instance can self update. /// </summary> /// <value><c>true</c> if this instance can self update; otherwise, <c>false</c>.</value> diff --git a/MediaBrowser.Common/Kernel/IKernel.cs b/MediaBrowser.Common/Kernel/IKernel.cs index a28500eca..0ffd46d02 100644 --- a/MediaBrowser.Common/Kernel/IKernel.cs +++ b/MediaBrowser.Common/Kernel/IKernel.cs @@ -54,11 +54,6 @@ namespace MediaBrowser.Common.Kernel SystemInfo GetSystemInfo(); /// <summary> - /// Reloads the logger. - /// </summary> - void ReloadLogger(); - - /// <summary> /// Called when [application updated]. /// </summary> /// <param name="newVersion">The new version.</param> @@ -106,11 +101,6 @@ namespace MediaBrowser.Common.Kernel IEnumerable<IWebSocketListener> WebSocketListeners { get; } /// <summary> - /// Occurs when [logger loaded]. - /// </summary> - event EventHandler LoggerLoaded; - - /// <summary> /// Occurs when [reload completed]. /// </summary> event EventHandler<EventArgs> ReloadCompleted; diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index ed49d26d8..7cb838e44 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -531,18 +531,9 @@ namespace MediaBrowser.Controller /// <param name="config">The config.</param> public void UpdateConfiguration(ServerConfiguration config) { - var oldConfiguration = Configuration; - - var reloadLogger = config.ShowLogWindow != oldConfiguration.ShowLogWindow; - Configuration = config; SaveConfiguration(); - if (reloadLogger) - { - ReloadLogger(); - } - // Validate currently executing providers, in the background Task.Run(() => { diff --git a/MediaBrowser.Logging.NLog/NlogManager.cs b/MediaBrowser.Logging.NLog/NlogManager.cs index 4d6aeadd8..fa69b94a0 100644 --- a/MediaBrowser.Logging.NLog/NlogManager.cs +++ b/MediaBrowser.Logging.NLog/NlogManager.cs @@ -1,27 +1,62 @@ -using NLog; +using MediaBrowser.Model.Logging; +using NLog; using NLog.Config; using NLog.Targets; +using System; +using System.IO; +using System.Threading.Tasks; namespace MediaBrowser.Logging.Nlog { /// <summary> /// Class NlogManager /// </summary> - public static class NlogManager + public class NlogManager : ILogManager { /// <summary> + /// Occurs when [logger loaded]. + /// </summary> + public event EventHandler LoggerLoaded; + /// <summary> + /// Gets or sets the log directory. + /// </summary> + /// <value>The log directory.</value> + private string LogDirectory { get; set; } + /// <summary> + /// Gets or sets the log file prefix. + /// </summary> + /// <value>The log file prefix.</value> + private string LogFilePrefix { get; set; } + /// <summary> + /// Gets the log file path. + /// </summary> + /// <value>The log file path.</value> + public string LogFilePath { get; private set; } + + /// <summary> + /// Initializes a new instance of the <see cref="NlogManager" /> class. + /// </summary> + /// <param name="logDirectory">The log directory.</param> + /// <param name="logFileNamePrefix">The log file name prefix.</param> + public NlogManager(string logDirectory, string logFileNamePrefix) + { + LogDirectory = logDirectory; + LogFilePrefix = logFileNamePrefix; + } + + /// <summary> /// Adds the file target. /// </summary> /// <param name="path">The path.</param> - /// <param name="enableDebugLogging">if set to <c>true</c> [enable debug logging].</param> - public static void AddFileTarget(string path, bool enableDebugLogging) + /// <param name="level">The level.</param> + private void AddFileTarget(string path, LogSeverity level) { var logFile = new FileTarget(); logFile.FileName = path; logFile.Layout = "${longdate}, ${level}, ${logger}, ${message}"; - AddLogTarget(logFile, "ApplicationLogFile", enableDebugLogging); + AddLogTarget(logFile, "ApplicationLogFile", level); } /// <summary> @@ -29,8 +64,8 @@ namespace MediaBrowser.Logging.Nlog /// </summary> /// <param name="target">The target.</param> /// <param name="name">The name.</param> - /// <param name="enableDebugLogging">if set to <c>true</c> [enable debug logging].</param> - private static void AddLogTarget(Target target, string name, bool enableDebugLogging) + /// <param name="level">The level.</param> + private void AddLogTarget(Target target, string name, LogSeverity level) { var config = LogManager.Configuration; @@ -39,12 +74,71 @@ namespace MediaBrowser.Logging.Nlog target.Name = name; config.AddTarget(name, target); - var level = enableDebugLogging ? LogLevel.Debug : LogLevel.Info; - - var rule = new LoggingRule("*", level, target); + var rule = new LoggingRule("*", GetLogLevel(level), target); config.LoggingRules.Add(rule); LogManager.Configuration = config; } + + /// <summary> + /// Gets the logger. + /// </summary> + /// <param name="name">The name.</param> + /// <returns>ILogger.</returns> + public ILogger GetLogger(string name) + { + return new NLogger(name); + } + + /// <summary> + /// Gets the log level. + /// </summary> + /// <param name="severity">The severity.</param> + /// <returns>LogLevel.</returns> + /// <exception cref="System.ArgumentException">Unrecognized LogSeverity</exception> + private LogLevel GetLogLevel(LogSeverity severity) + { + switch (severity) + { + case LogSeverity.Debug: + return LogLevel.Debug; + case LogSeverity.Error: + return LogLevel.Error; + case LogSeverity.Fatal: + return LogLevel.Fatal; + case LogSeverity.Info: + return LogLevel.Info; + case LogSeverity.Warn: + return LogLevel.Warn; + default: + throw new ArgumentException("Unrecognized LogSeverity"); + } + } + + /// <summary> + /// Reloads the logger. + /// </summary> + /// <param name="level">The level.</param> + public void ReloadLogger(LogSeverity level) + { + LogFilePath = Path.Combine(LogDirectory, LogFilePrefix + "-" + DateTime.Now.Ticks + ".log"); + + AddFileTarget(LogFilePath, level); + + if (LoggerLoaded != null) + { + Task.Run(() => + { + try + { + LoggerLoaded(this, EventArgs.Empty); + } + catch (Exception ex) + { + GetLogger("Logger").ErrorException("Error in LoggerLoaded event", ex); + } + }); + } + } } } diff --git a/MediaBrowser.Model/Logging/ILogManager.cs b/MediaBrowser.Model/Logging/ILogManager.cs new file mode 100644 index 000000000..1d6db2bd8 --- /dev/null +++ b/MediaBrowser.Model/Logging/ILogManager.cs @@ -0,0 +1,33 @@ +using System; + +namespace MediaBrowser.Model.Logging +{ + /// <summary> + /// Interface ILogManager + /// </summary> + public interface ILogManager + { + /// <summary> + /// Gets the logger. + /// </summary> + /// <param name="name">The name.</param> + /// <returns>ILogger.</returns> + ILogger GetLogger(string name); + + /// <summary> + /// Reloads the logger. + /// </summary> + void ReloadLogger(LogSeverity severity); + + /// <summary> + /// Gets the log file path. + /// </summary> + /// <value>The log file path.</value> + string LogFilePath { get; } + + /// <summary> + /// Occurs when [logger loaded]. + /// </summary> + event EventHandler LoggerLoaded; + } +} diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 8e8f88c20..ba3818160 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -48,6 +48,7 @@ <Compile Include="Entities\BaseItemInfo.cs" /> <Compile Include="Connectivity\ClientConnectionInfo.cs" /> <Compile Include="Connectivity\ClientType.cs" /> + <Compile Include="Logging\ILogManager.cs" /> <Compile Include="MediaInfo\BlurayDiscInfo.cs" /> <Compile Include="Entities\ChapterInfo.cs" /> <Compile Include="Entities\LocationType.cs" /> diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 07246eded..2cdb5789b 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -12,6 +12,7 @@ using MediaBrowser.Controller; using MediaBrowser.IsoMounter; using MediaBrowser.Logging.Nlog; using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.Serialization; using MediaBrowser.Model.System; @@ -40,12 +41,6 @@ namespace MediaBrowser.ServerApplication public class ApplicationHost : BaseApplicationHost, IApplicationHost { /// <summary> - /// Gets or sets the log file path. - /// </summary> - /// <value>The log file path.</value> - public string LogFilePath { get; private set; } - - /// <summary> /// Gets or sets the kernel. /// </summary> /// <value>The kernel.</value> @@ -62,15 +57,13 @@ namespace MediaBrowser.ServerApplication private readonly IXmlSerializer _xmlSerializer = new XmlSerializer(); /// <summary> - /// The _application paths + /// Gets the server application paths. /// </summary> - private readonly IServerApplicationPaths _applicationPaths = new ServerApplicationPaths(); - - /// <summary> - /// Gets a value indicating whether this instance is first run. - /// </summary> - /// <value><c>true</c> if this instance is first run; otherwise, <c>false</c>.</value> - public bool IsFirstRun { get; private set; } + /// <value>The server application paths.</value> + protected IServerApplicationPaths ServerApplicationPaths + { + get { return (IServerApplicationPaths) ApplicationPaths; } + } /// <summary> /// Initializes a new instance of the <see cref="ApplicationHost" /> class. @@ -79,21 +72,15 @@ namespace MediaBrowser.ServerApplication public ApplicationHost() : base() { - IsFirstRun = !File.Exists(_applicationPaths.SystemConfigurationFilePath); - - Logger = new NLogger("App"); - - DiscoverTypes(); - - Kernel = new Kernel(this, _applicationPaths, _xmlSerializer, Logger); + Kernel = new Kernel(this, ServerApplicationPaths, _xmlSerializer, Logger); var networkManager = new NetworkManager(); var serverManager = new ServerManager(this, Kernel, networkManager, _jsonSerializer, Logger); - var taskManager = new TaskManager(_applicationPaths, _jsonSerializer, Logger, serverManager); + var taskManager = new TaskManager(ApplicationPaths, _jsonSerializer, Logger, serverManager); - ReloadLogger(); + LogManager.ReloadLogger(Kernel.Configuration.EnableDebugLevelLogging ? LogSeverity.Debug : LogSeverity.Info); Logger.Info("Version {0} initializing", ApplicationVersion); @@ -105,6 +92,24 @@ namespace MediaBrowser.ServerApplication } /// <summary> + /// Gets the application paths. + /// </summary> + /// <returns>IApplicationPaths.</returns> + protected override IApplicationPaths GetApplicationPaths() + { + return new ServerApplicationPaths(); + } + + /// <summary> + /// Gets the log manager. + /// </summary> + /// <returns>ILogManager.</returns> + protected override ILogManager GetLogManager() + { + return new NlogManager(ApplicationPaths.LogDirectoryPath, "Server"); + } + + /// <summary> /// Registers resources that classes will depend on /// </summary> private void RegisterResources(ITaskManager taskManager, IHttpServer httpServer, INetworkManager networkManager, IServerManager serverManager) @@ -113,14 +118,15 @@ namespace MediaBrowser.ServerApplication RegisterSingleInstance(Kernel); RegisterSingleInstance<IApplicationHost>(this); + RegisterSingleInstance(LogManager); RegisterSingleInstance(Logger); - RegisterSingleInstance(_applicationPaths); - RegisterSingleInstance<IApplicationPaths>(_applicationPaths); + RegisterSingleInstance(ApplicationPaths); + RegisterSingleInstance(ServerApplicationPaths); RegisterSingleInstance(taskManager); RegisterSingleInstance<IIsoManager>(new PismoIsoManager(Logger)); RegisterSingleInstance<IBlurayExaminer>(new BdInfoExaminer()); - RegisterSingleInstance<IHttpClient>(new HttpManager(_applicationPaths, Logger)); + RegisterSingleInstance<IHttpClient>(new HttpManager(ApplicationPaths, Logger)); RegisterSingleInstance<IZipClient>(new DotNetZipClient()); RegisterSingleInstance<IWebSocketServer>(() => new AlchemyServer(Logger)); RegisterSingleInstance(_jsonSerializer); @@ -147,24 +153,12 @@ namespace MediaBrowser.ServerApplication /// <summary> /// Restarts this instance. /// </summary> - /// <exception cref="System.NotImplementedException"></exception> public void Restart() { App.Instance.Restart(); } /// <summary> - /// Reloads the logger. - /// </summary> - /// <exception cref="System.NotImplementedException"></exception> - public void ReloadLogger() - { - LogFilePath = Path.Combine(_applicationPaths.LogDirectoryPath, "Server-" + DateTime.Now.Ticks + ".log"); - - NlogManager.AddFileTarget(LogFilePath, Kernel.Configuration.EnableDebugLevelLogging); - } - - /// <summary> /// Gets or sets a value indicating whether this instance can self update. /// </summary> /// <value><c>true</c> if this instance can self update; otherwise, <c>false</c>.</value> @@ -204,7 +198,7 @@ namespace MediaBrowser.ServerApplication // Gets all plugin assemblies by first reading all bytes of the .dll and calling Assembly.Load against that // This will prevent the .dll file from getting locked, and allow us to replace it when needed foreach (var pluginAssembly in Directory - .EnumerateFiles(_applicationPaths.PluginsPath, "*.dll", SearchOption.TopDirectoryOnly) + .EnumerateFiles(ApplicationPaths.PluginsPath, "*.dll", SearchOption.TopDirectoryOnly) .Select(LoadAssembly).Where(a => a != null)) { yield return pluginAssembly; diff --git a/MediaBrowser.ServerApplication/MainWindow.xaml.cs b/MediaBrowser.ServerApplication/MainWindow.xaml.cs index fc0f0efc9..b3b26f57a 100644 --- a/MediaBrowser.ServerApplication/MainWindow.xaml.cs +++ b/MediaBrowser.ServerApplication/MainWindow.xaml.cs @@ -56,26 +56,32 @@ namespace MediaBrowser.ServerApplication private readonly IApplicationHost _appHost; /// <summary> + /// The _log manager + /// </summary> + private readonly ILogManager _logManager; + + /// <summary> /// Initializes a new instance of the <see cref="MainWindow" /> class. /// </summary> /// <param name="jsonSerializer">The json serializer.</param> /// <param name="logger">The logger.</param> /// <param name="appHost">The app host.</param> /// <exception cref="System.ArgumentNullException">logger</exception> - public MainWindow(IJsonSerializer jsonSerializer, ILogger logger, IApplicationHost appHost) + public MainWindow(IJsonSerializer jsonSerializer, ILogManager logManager, IApplicationHost appHost) { if (jsonSerializer == null) { throw new ArgumentNullException("jsonSerializer"); } - if (logger == null) + if (logManager == null) { - throw new ArgumentNullException("logger"); + throw new ArgumentNullException("logManager"); } _jsonSerializer = jsonSerializer; - _logger = logger; + _logger = logManager.GetLogger("MainWindow"); _appHost = appHost; + _logManager = logManager; InitializeComponent(); @@ -94,7 +100,7 @@ namespace MediaBrowser.ServerApplication Instance_ConfigurationUpdated(null, EventArgs.Empty); Kernel.Instance.ReloadCompleted += KernelReloadCompleted; - Kernel.Instance.LoggerLoaded += LoadLogWindow; + _logManager.LoggerLoaded += LoadLogWindow; Kernel.Instance.HasPendingRestartChanged += Instance_HasPendingRestartChanged; Kernel.Instance.ConfigurationUpdated += Instance_ConfigurationUpdated; } @@ -115,6 +121,13 @@ namespace MediaBrowser.ServerApplication separatorDeveloperTools.Visibility = developerToolsVisibility; cmdReloadServer.Visibility = developerToolsVisibility; cmOpenExplorer.Visibility = developerToolsVisibility; + + var logWindow = App.Instance.Windows.OfType<LogWindow>().FirstOrDefault(); + + if ((logWindow == null && Kernel.Instance.Configuration.ShowLogWindow) || (logWindow != null && !Kernel.Instance.Configuration.ShowLogWindow)) + { + _logManager.ReloadLogger(Kernel.Instance.Configuration.EnableDebugLevelLogging ? LogSeverity.Debug : LogSeverity.Info); + } }); } |
