From 8b7effd6ff1694688e93d03a48c5dcddb4efe4f0 Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Tue, 18 Sep 2012 15:33:57 -0400 Subject: Moved discovery of loggers and weather providers to MEF. Also added support for third-party image processors, also discovered through MEF. --- MediaBrowser.Common/Logging/BaseLogger.cs | 86 ++------------------------ MediaBrowser.Common/Logging/LogSeverity.cs | 4 +- MediaBrowser.Common/Logging/Logger.cs | 66 ++++++++++++++++++-- MediaBrowser.Common/Logging/StreamLogger.cs | 37 ----------- MediaBrowser.Common/Logging/TraceFileLogger.cs | 38 ++++++++++++ MediaBrowser.Common/Logging/TraceLogger.cs | 12 ---- 6 files changed, 105 insertions(+), 138 deletions(-) delete mode 100644 MediaBrowser.Common/Logging/StreamLogger.cs create mode 100644 MediaBrowser.Common/Logging/TraceFileLogger.cs delete mode 100644 MediaBrowser.Common/Logging/TraceLogger.cs (limited to 'MediaBrowser.Common/Logging') diff --git a/MediaBrowser.Common/Logging/BaseLogger.cs b/MediaBrowser.Common/Logging/BaseLogger.cs index 572ce36b2d..a97bc201f2 100644 --- a/MediaBrowser.Common/Logging/BaseLogger.cs +++ b/MediaBrowser.Common/Logging/BaseLogger.cs @@ -1,92 +1,16 @@ -using System; -using System.Text; -using System.Threading; +using MediaBrowser.Common.Kernel; +using System; namespace MediaBrowser.Common.Logging { public abstract class BaseLogger : IDisposable { - public LogSeverity LogSeverity { get; set; } - - public void LogInfo(string message, params object[] paramList) - { - LogEntry(message, LogSeverity.Info, paramList); - } - - public void LogDebugInfo(string message, params object[] paramList) - { - LogEntry(message, LogSeverity.Debug, paramList); - } - - public void LogError(string message, params object[] paramList) - { - LogEntry(message, LogSeverity.Error, paramList); - } - - public void LogException(string message, Exception exception, params object[] paramList) - { - var builder = new StringBuilder(); - - if (exception != null) - { - builder.AppendFormat("Exception. Type={0} Msg={1} StackTrace={3}{2}", - exception.GetType().FullName, - exception.Message, - exception.StackTrace, - Environment.NewLine); - } - - message = FormatMessage(message, paramList); - - LogError(string.Format("{0} ( {1} )", message, builder)); - } - - public void LogWarning(string message, params object[] paramList) - { - LogEntry(message, LogSeverity.Warning, paramList); - } - - private string FormatMessage(string message, params object[] paramList) - { - if (paramList != null) - { - for (int i = 0; i < paramList.Length; i++) - { - message = message.Replace("{" + i + "}", paramList[i].ToString()); - } - } - - return message; - } - - private void LogEntry(string message, LogSeverity severity, params object[] paramList) - { - if (severity < LogSeverity) return; - - message = FormatMessage(message, paramList); - - Thread currentThread = Thread.CurrentThread; - - var row = new LogRow - { - Severity = severity, - Message = message, - ThreadId = currentThread.ManagedThreadId, - ThreadName = currentThread.Name, - Time = DateTime.Now - }; - - LogEntry(row); - } - - protected virtual void Flush() - { - } + public abstract void Initialize(IKernel kernel); + public abstract void LogEntry(LogRow row); public virtual void Dispose() { + Logger.LogInfo("Disposing " + GetType().Name); } - - protected abstract void LogEntry(LogRow row); } } diff --git a/MediaBrowser.Common/Logging/LogSeverity.cs b/MediaBrowser.Common/Logging/LogSeverity.cs index 2abab1a448..97abfe7b58 100644 --- a/MediaBrowser.Common/Logging/LogSeverity.cs +++ b/MediaBrowser.Common/Logging/LogSeverity.cs @@ -1,4 +1,4 @@ -using System; +using System; namespace MediaBrowser.Common.Logging { @@ -11,4 +11,4 @@ namespace MediaBrowser.Common.Logging Warning = 4, Error = 8 } -} +} \ No newline at end of file diff --git a/MediaBrowser.Common/Logging/Logger.cs b/MediaBrowser.Common/Logging/Logger.cs index e66c1d8444..9ac02fe3ea 100644 --- a/MediaBrowser.Common/Logging/Logger.cs +++ b/MediaBrowser.Common/Logging/Logger.cs @@ -1,24 +1,28 @@ using System; +using System.Diagnostics; +using System.Text; +using System.Threading; +using MediaBrowser.Common.Kernel; namespace MediaBrowser.Common.Logging { public static class Logger { - public static BaseLogger LoggerInstance { get; set; } + internal static IKernel Kernel { get; set; } public static void LogInfo(string message, params object[] paramList) { - LoggerInstance.LogInfo(message, paramList); + LogEntry(message, LogSeverity.Info, paramList); } public static void LogDebugInfo(string message, params object[] paramList) { - LoggerInstance.LogDebugInfo(message, paramList); + LogEntry(message, LogSeverity.Debug, paramList); } public static void LogError(string message, params object[] paramList) { - LoggerInstance.LogError(message, paramList); + LogEntry(message, LogSeverity.Error, paramList); } public static void LogException(Exception ex, params object[] paramList) @@ -28,12 +32,62 @@ namespace MediaBrowser.Common.Logging public static void LogException(string message, Exception ex, params object[] paramList) { - LoggerInstance.LogException(message, ex, paramList); + var builder = new StringBuilder(); + + if (ex != null) + { + builder.AppendFormat("Exception. Type={0} Msg={1} StackTrace={3}{2}", + ex.GetType().FullName, + ex.Message, + ex.StackTrace, + Environment.NewLine); + } + + message = FormatMessage(message, paramList); + + LogError(string.Format("{0} ( {1} )", message, builder)); } public static void LogWarning(string message, params object[] paramList) { - LoggerInstance.LogWarning(message, paramList); + LogEntry(message, LogSeverity.Warning, paramList); + } + + private static void LogEntry(string message, LogSeverity severity, params object[] paramList) + { + message = FormatMessage(message, paramList); + + Thread currentThread = Thread.CurrentThread; + + var row = new LogRow + { + Severity = severity, + Message = message, + ThreadId = currentThread.ManagedThreadId, + ThreadName = currentThread.Name, + Time = DateTime.Now + }; + + if (Kernel.Loggers != null) + { + foreach (var logger in Kernel.Loggers) + { + logger.LogEntry(row); + } + } + } + + private static string FormatMessage(string message, params object[] paramList) + { + if (paramList != null) + { + for (int i = 0; i < paramList.Length; i++) + { + message = message.Replace("{" + i + "}", paramList[i].ToString()); + } + } + + return message; } } } diff --git a/MediaBrowser.Common/Logging/StreamLogger.cs b/MediaBrowser.Common/Logging/StreamLogger.cs deleted file mode 100644 index 03b9bd6d26..0000000000 --- a/MediaBrowser.Common/Logging/StreamLogger.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.IO; -using System.Text; - -namespace MediaBrowser.Common.Logging -{ - /// - /// Provides a Logger that can write to any Stream - /// - public class StreamLogger : BaseLogger - { - private Stream Stream { get; set; } - - public StreamLogger(Stream stream) - : base() - { - Stream = stream; - } - - protected override void LogEntry(LogRow row) - { - byte[] bytes = new UTF8Encoding().GetBytes(row.ToString() + Environment.NewLine); - - lock (Stream) - { - Stream.Write(bytes, 0, bytes.Length); - Stream.Flush(); - } - } - - public override void Dispose() - { - base.Dispose(); - Stream.Dispose(); - } - } -} diff --git a/MediaBrowser.Common/Logging/TraceFileLogger.cs b/MediaBrowser.Common/Logging/TraceFileLogger.cs new file mode 100644 index 0000000000..7ab67a137e --- /dev/null +++ b/MediaBrowser.Common/Logging/TraceFileLogger.cs @@ -0,0 +1,38 @@ +using MediaBrowser.Common.Kernel; +using System; +using System.ComponentModel.Composition; +using System.Diagnostics; +using System.IO; + +namespace MediaBrowser.Common.Logging +{ + [Export(typeof(BaseLogger))] + public class TraceFileLogger : BaseLogger + { + private TraceListener Listener { get; set; } + + public override void Initialize(IKernel kernel) + { + DateTime now = DateTime.Now; + + string logFilePath = Path.Combine(kernel.ApplicationPaths.LogDirectoryPath, "log-" + now.ToString("dMyyyy") + "-" + now.Ticks + ".log"); + + Listener = new TextWriterTraceListener(logFilePath); + Trace.Listeners.Add(Listener); + Trace.AutoFlush = true; + } + + public override void Dispose() + { + base.Dispose(); + + Trace.Listeners.Remove(Listener); + Listener.Dispose(); + } + + public override void LogEntry(LogRow row) + { + Trace.WriteLine(row.ToString()); + } + } +} diff --git a/MediaBrowser.Common/Logging/TraceLogger.cs b/MediaBrowser.Common/Logging/TraceLogger.cs deleted file mode 100644 index d152f97806..0000000000 --- a/MediaBrowser.Common/Logging/TraceLogger.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Diagnostics; - -namespace MediaBrowser.Common.Logging -{ - public class TraceLogger : BaseLogger - { - protected override void LogEntry(LogRow row) - { - Trace.WriteLine(row.ToString()); - } - } -} -- cgit v1.2.3