aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Logging.NLog/NlogManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Logging.NLog/NlogManager.cs')
-rw-r--r--MediaBrowser.Logging.NLog/NlogManager.cs114
1 files changed, 104 insertions, 10 deletions
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);
+ }
+ });
+ }
+ }
}
}