diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs
index 09bb67218f..f997aea5dd 100644
--- a/MediaBrowser.Common/Kernel/BaseKernel.cs
+++ b/MediaBrowser.Common/Kernel/BaseKernel.cs
@@ -6,12 +6,12 @@ using System.Configuration;
using System.IO;
using System.Linq;
using System.Reflection;
-using MediaBrowser.Common.Configuration;
+using MediaBrowser.Model.Configuration;
using MediaBrowser.Common.Json;
-using MediaBrowser.Common.Logging;
using MediaBrowser.Common.Net;
using MediaBrowser.Common.Plugins;
-using MediaBrowser.Common.Progress;
+using MediaBrowser.Model.Progress;
+using MediaBrowser.Logging;
namespace MediaBrowser.Common.Kernel
{
@@ -48,6 +48,22 @@ namespace MediaBrowser.Common.Kernel
}
}
+ ///
+ /// Gets the path to the log directory
+ ///
+ private string LogDirectoryPath
+ {
+ get
+ {
+ return Path.Combine(ProgramDataPath, "logs");
+ }
+ }
+
+ ///
+ /// Gets or sets the path to the current log file
+ ///
+ private string LogFilePath { get; set; }
+
///
/// Gets the current configuration
///
@@ -73,12 +89,12 @@ namespace MediaBrowser.Common.Kernel
public BaseKernel()
{
ProgramDataPath = GetProgramDataPath();
-
- Logger.LoggerInstance = new FileLogger(Path.Combine(ProgramDataPath, "Logs"));
}
public virtual void Init(IProgress progress)
{
+ ReloadLogger();
+
ReloadConfiguration();
ReloadHttpServer();
@@ -86,6 +102,24 @@ namespace MediaBrowser.Common.Kernel
ReloadComposableParts();
}
+ private void ReloadLogger()
+ {
+ DisposeLogger();
+
+ if (!Directory.Exists(LogDirectoryPath))
+ {
+ Directory.CreateDirectory(LogDirectoryPath);
+ }
+
+ DateTime now = DateTime.Now;
+
+ LogFilePath = Path.Combine(LogDirectoryPath, now.ToString("dMyyyy") + "-" + now.Ticks + ".log");
+
+ FileStream fs = new FileStream(LogFilePath, FileMode.Append, FileAccess.Write, FileShare.Read);
+
+ Logger.LoggerInstance = new StreamLogger(fs);
+ }
+
///
/// Uses MEF to locate plugins
/// Subclasses can use this to locate types within plugins
@@ -213,14 +247,6 @@ namespace MediaBrowser.Common.Kernel
HttpServer = new HttpServer("http://+:" + Configuration.HttpServerPortNumber + "/mediabrowser/");
}
- private void DisposeHttpServer()
- {
- if (HttpServer != null)
- {
- HttpServer.Dispose();
- }
- }
-
///
/// This snippet will allow any plugin to reference another
///
@@ -244,6 +270,23 @@ namespace MediaBrowser.Common.Kernel
public void Dispose()
{
DisposeHttpServer();
+ DisposeLogger();
+ }
+
+ private void DisposeHttpServer()
+ {
+ if (HttpServer != null)
+ {
+ HttpServer.Dispose();
+ }
+ }
+
+ private void DisposeLogger()
+ {
+ if (Logger.LoggerInstance != null)
+ {
+ Logger.LoggerInstance.Dispose();
+ }
}
}
}
diff --git a/MediaBrowser.Common/Logging/FileLogger.cs b/MediaBrowser.Common/Logging/FileLogger.cs
deleted file mode 100644
index 33c64b1391..0000000000
--- a/MediaBrowser.Common/Logging/FileLogger.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System;
-using System.IO;
-using System.Text;
-
-namespace MediaBrowser.Common.Logging
-{
- public class FileLogger : BaseLogger, IDisposable
- {
- private string LogDirectory { get; set; }
- private string CurrentLogFile { get; set; }
-
- private FileStream FileStream { get; set; }
-
- public FileLogger(string logDirectory)
- {
- LogDirectory = logDirectory;
- }
-
- private void EnsureStream()
- {
- if (FileStream == null)
- {
- if (!Directory.Exists(LogDirectory))
- {
- Directory.CreateDirectory(LogDirectory);
- }
-
- DateTime now = DateTime.Now;
-
- CurrentLogFile = Path.Combine(LogDirectory, now.ToString("dMyyyy") + "-" + now.Ticks + ".log");
-
- FileStream = new FileStream(CurrentLogFile, FileMode.Append, FileAccess.Write, FileShare.Read);
- }
- }
-
- protected override void LogEntry(LogRow row)
- {
- EnsureStream();
-
- byte[] bytes = new UTF8Encoding().GetBytes(row.ToString() + Environment.NewLine);
-
- FileStream.Write(bytes, 0, bytes.Length);
-
- FileStream.Flush();
- }
-
- public void Dispose()
- {
- if (FileStream != null)
- {
- FileStream.Dispose();
- }
- }
- }
-}
diff --git a/MediaBrowser.Common/Logging/LogRow.cs b/MediaBrowser.Common/Logging/LogRow.cs
deleted file mode 100644
index 39c69eb454..0000000000
--- a/MediaBrowser.Common/Logging/LogRow.cs
+++ /dev/null
@@ -1,118 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace MediaBrowser.Common.Logging
-{
- public struct LogRow
- {
-
- const string TimePattern = "h:mm:ss.fff tt d/M/yyyy";
-
-
- public LogSeverity Severity { get; set; }
- public string Message { get; set; }
- public string Category { get; set; }
- public int ThreadId { get; set; }
- public string ThreadName { get; set; }
- public DateTime Time { get; set; }
-
- public string ShortMessage
- {
- get
- {
- var message = Message;
- if (message.Length > 120)
- {
- message = Message.Substring(0, 120).Replace(Environment.NewLine, " ") + " ... ";
- }
- return message;
- }
- }
-
- public string FullDescription
- {
- get
- {
- StringBuilder sb = new StringBuilder();
- sb.AppendFormat("Time: {0}", Time);
- sb.AppendLine();
- sb.AppendFormat("Thread Id: {0} {1}", ThreadId, ThreadName);
- sb.AppendLine();
- sb.AppendLine(Message);
- return sb.ToString();
- }
- }
-
- public override string ToString()
- {
- StringBuilder builder = new StringBuilder();
- builder.Append(Time.ToString(TimePattern))
- .Append(" , ")
- .Append(Enum.GetName(typeof(LogSeverity), Severity))
- .Append(" , ")
- .Append(Encode(Message))
- .Append(" , ")
- .Append(Encode(Category))
- .Append(" , ")
- .Append(ThreadId)
- .Append(" , ")
- .Append(Encode(ThreadName));
- return builder.ToString();
- }
-
- private string Encode(string str)
- {
- return (str ?? "").Replace(",", ",,").Replace(Environment.NewLine, " [n] ");
- }
-
- public static LogRow FromString(string message)
- {
- var split = splitString(message);
- return new LogRow()
- {
- Time = DateTime.ParseExact(split[0], TimePattern, null),
- Severity = (LogSeverity)Enum.Parse(typeof(LogSeverity), split[1]),
- Message = split[2],
- Category = split[3],
- ThreadId = int.Parse(split[4]),
- ThreadName = split[5]
- };
- }
-
- static string[] splitString(string message)
- {
- List items = new List();
- bool gotComma = false;
-
- StringBuilder currentItem = new StringBuilder();
-
- foreach (var chr in message)
- {
-
- if (chr == ',' && gotComma)
- {
- gotComma = false;
- currentItem.Append(',');
- }
- else if (chr == ',')
- {
- gotComma = true;
- }
- else if (gotComma)
- {
- items.Add(currentItem.ToString().Replace(" [n] ", Environment.NewLine).Trim());
- currentItem = new StringBuilder();
- gotComma = false;
- }
- else
- {
- currentItem.Append(chr);
- }
-
- }
- items.Add(currentItem.ToString().Replace("[n]", Environment.NewLine).Trim());
- return items.ToArray();
- }
- }
-}
diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj
index 53a1c71215..bf9d17b78c 100644
--- a/MediaBrowser.Common/MediaBrowser.Common.csproj
+++ b/MediaBrowser.Common/MediaBrowser.Common.csproj
@@ -48,12 +48,10 @@
-
-
@@ -62,18 +60,17 @@
-
-
-
-
-
+
+ {37032b77-fe2e-4ec5-b7e4-baf634443578}
+ MediaBrowser.Logging
+
{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}
MediaBrowser.Model
diff --git a/MediaBrowser.Controller/Configuration/ServerConfiguration.cs b/MediaBrowser.Controller/Configuration/ServerConfiguration.cs
index 56f3a854fa..e6f794595b 100644
--- a/MediaBrowser.Controller/Configuration/ServerConfiguration.cs
+++ b/MediaBrowser.Controller/Configuration/ServerConfiguration.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using MediaBrowser.Common.Configuration;
using MediaBrowser.Model.Configuration;
namespace MediaBrowser.Controller.Configuration
diff --git a/MediaBrowser.Common/Logging/BaseLogger.cs b/MediaBrowser.Logging/BaseLogger.cs
similarity index 74%
rename from MediaBrowser.Common/Logging/BaseLogger.cs
rename to MediaBrowser.Logging/BaseLogger.cs
index 51c6632d56..d73b473930 100644
--- a/MediaBrowser.Common/Logging/BaseLogger.cs
+++ b/MediaBrowser.Logging/BaseLogger.cs
@@ -1,11 +1,10 @@
using System;
-using System.Diagnostics;
using System.Text;
using System.Threading;
-namespace MediaBrowser.Common.Logging
+namespace MediaBrowser.Logging
{
- public abstract class BaseLogger
+ public abstract class BaseLogger : IDisposable
{
public LogSeverity LogSeverity { get; set; }
@@ -27,23 +26,16 @@ namespace MediaBrowser.Common.Logging
public void LogException(string message, Exception exception, params object[] paramList)
{
StringBuilder builder = new StringBuilder();
-
+
if (exception != null)
{
- var trace = new StackTrace(exception, true);
- builder.AppendFormat("Exception. Type={0} Msg={1} Src={2} Method={5} Line={6} Col={7}{4}StackTrace={4}{3}",
+ builder.AppendFormat("Exception. Type={0} Msg={1} StackTrace={3}{2}",
exception.GetType().FullName,
exception.Message,
- exception.Source,
exception.StackTrace,
- Environment.NewLine,
- trace.GetFrame(0).GetMethod().Name,
- trace.GetFrame(0).GetFileLineNumber(),
- trace.GetFrame(0).GetFileColumnNumber());
+ Environment.NewLine);
}
- StackFrame frame = new StackFrame(1);
-
message = string.Format(message, paramList);
LogError(string.Format("{0} ( {1} )", message, builder));
@@ -68,13 +60,17 @@ namespace MediaBrowser.Common.Logging
Message = message,
Category = string.Empty,
ThreadId = currentThread.ManagedThreadId,
- ThreadName = currentThread.Name,
+ //ThreadName = currentThread.Name,
Time = DateTime.Now
};
LogEntry(row);
}
+ public virtual void Dispose()
+ {
+ }
+
protected abstract void LogEntry(LogRow row);
}
}
diff --git a/MediaBrowser.Logging/LogRow.cs b/MediaBrowser.Logging/LogRow.cs
new file mode 100644
index 0000000000..da699035a2
--- /dev/null
+++ b/MediaBrowser.Logging/LogRow.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Text;
+
+namespace MediaBrowser.Logging
+{
+ public struct LogRow
+ {
+ const string TimePattern = "h:mm:ss.fff tt d/M/yyyy";
+
+ public LogSeverity Severity { get; set; }
+ public string Message { get; set; }
+ public string Category { get; set; }
+ public int ThreadId { get; set; }
+ public string ThreadName { get; set; }
+ public DateTime Time { get; set; }
+
+ public override string ToString()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.Append(Time.ToString(TimePattern))
+ .Append(" , ")
+ .Append(Enum.GetName(typeof(LogSeverity), Severity))
+ .Append(" , ")
+ .Append(Encode(Message))
+ .Append(" , ")
+ .Append(Encode(Category))
+ .Append(" , ")
+ .Append(ThreadId)
+ .Append(" , ")
+ .Append(Encode(ThreadName));
+
+ return builder.ToString();
+ }
+
+ private string Encode(string str)
+ {
+ return (str ?? "").Replace(",", ",,").Replace(Environment.NewLine, " [n] ");
+ }
+ }
+}
diff --git a/MediaBrowser.Common/Logging/LogSeverity.cs b/MediaBrowser.Logging/LogSeverity.cs
similarity index 76%
rename from MediaBrowser.Common/Logging/LogSeverity.cs
rename to MediaBrowser.Logging/LogSeverity.cs
index 2abab1a448..70c4f6304b 100644
--- a/MediaBrowser.Common/Logging/LogSeverity.cs
+++ b/MediaBrowser.Logging/LogSeverity.cs
@@ -1,6 +1,6 @@
using System;
-namespace MediaBrowser.Common.Logging
+namespace MediaBrowser.Logging
{
[Flags]
public enum LogSeverity
diff --git a/MediaBrowser.Common/Logging/Logger.cs b/MediaBrowser.Logging/Logger.cs
similarity index 92%
rename from MediaBrowser.Common/Logging/Logger.cs
rename to MediaBrowser.Logging/Logger.cs
index d1ae9b8f35..db46010a41 100644
--- a/MediaBrowser.Common/Logging/Logger.cs
+++ b/MediaBrowser.Logging/Logger.cs
@@ -1,6 +1,6 @@
using System;
-namespace MediaBrowser.Common.Logging
+namespace MediaBrowser.Logging
{
public static class Logger
{
diff --git a/MediaBrowser.Logging/MediaBrowser.Logging.csproj b/MediaBrowser.Logging/MediaBrowser.Logging.csproj
new file mode 100644
index 0000000000..39840f71fd
--- /dev/null
+++ b/MediaBrowser.Logging/MediaBrowser.Logging.csproj
@@ -0,0 +1,53 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {37032B77-FE2E-4EC5-B7E4-BAF634443578}
+ Library
+ Properties
+ MediaBrowser.Logging
+ MediaBrowser.Logging
+ v4.0
+ Profile95
+ 512
+ {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/MediaBrowser.Logging/Properties/AssemblyInfo.cs b/MediaBrowser.Logging/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..fa0d3817d2
--- /dev/null
+++ b/MediaBrowser.Logging/Properties/AssemblyInfo.cs
@@ -0,0 +1,30 @@
+using System.Resources;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("MediaBrowser.Logging")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MediaBrowser.Logging")]
+[assembly: AssemblyCopyright("Copyright © 2012")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: NeutralResourcesLanguage("en")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/MediaBrowser.Logging/StreamLogger.cs b/MediaBrowser.Logging/StreamLogger.cs
new file mode 100644
index 0000000000..f1a16c7ad1
--- /dev/null
+++ b/MediaBrowser.Logging/StreamLogger.cs
@@ -0,0 +1,32 @@
+using System;
+using System.IO;
+using System.Text;
+
+namespace MediaBrowser.Logging
+{
+ 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);
+
+ Stream.Write(bytes, 0, bytes.Length);
+ Stream.Flush();
+ }
+
+ public override void Dispose()
+ {
+ base.Dispose();
+
+ Stream.Dispose();
+ }
+ }
+}
diff --git a/MediaBrowser.Common/Configuration/BaseApplicationConfiguration.cs b/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs
similarity index 81%
rename from MediaBrowser.Common/Configuration/BaseApplicationConfiguration.cs
rename to MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs
index 7ed782bdb1..2511377c15 100644
--- a/MediaBrowser.Common/Configuration/BaseApplicationConfiguration.cs
+++ b/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs
@@ -1,6 +1,6 @@
-using MediaBrowser.Common.Logging;
+using MediaBrowser.Logging;
-namespace MediaBrowser.Common.Configuration
+namespace MediaBrowser.Model.Configuration
{
///
/// Serves as a common base class for the Server and UI application Configurations
diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj
index ceb58163ab..9338b3884e 100644
--- a/MediaBrowser.Model/MediaBrowser.Model.csproj
+++ b/MediaBrowser.Model/MediaBrowser.Model.csproj
@@ -10,7 +10,7 @@
MediaBrowser.Model
MediaBrowser.Model
v4.0
- Profile4
+ Profile95
512
{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
@@ -33,8 +33,13 @@
+
+ {37032b77-fe2e-4ec5-b7e4-baf634443578}
+ MediaBrowser.Logging
+
+
@@ -48,6 +53,7 @@
+
diff --git a/MediaBrowser.Common/Progress/TaskProgress.cs b/MediaBrowser.Model/Progress/TaskProgress.cs
similarity index 89%
rename from MediaBrowser.Common/Progress/TaskProgress.cs
rename to MediaBrowser.Model/Progress/TaskProgress.cs
index 78e817397a..1bf135029b 100644
--- a/MediaBrowser.Common/Progress/TaskProgress.cs
+++ b/MediaBrowser.Model/Progress/TaskProgress.cs
@@ -1,5 +1,5 @@
-namespace MediaBrowser.Common.Progress
+namespace MediaBrowser.Model.Progress
{
///
/// Represents a generic progress class that can be used with IProgress
diff --git a/MediaBrowser.Program/Program.cs b/MediaBrowser.Program/Program.cs
index a951ec7dba..fff4c9f16c 100644
--- a/MediaBrowser.Program/Program.cs
+++ b/MediaBrowser.Program/Program.cs
@@ -1,6 +1,6 @@
using System;
using MediaBrowser.Controller;
-using MediaBrowser.Common.Progress;
+using MediaBrowser.Model.Progress;
namespace MediaBrowser.Program
{
@@ -28,6 +28,8 @@ namespace MediaBrowser.Program
Console.WriteLine("Press Enter to quit.");
Console.ReadLine();
+
+ kernel.Dispose();
}
}
}
diff --git a/MediaBrowser.sln b/MediaBrowser.sln
index 6f94baf31d..bebbc61afd 100644
--- a/MediaBrowser.sln
+++ b/MediaBrowser.sln
@@ -21,6 +21,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Common", "Medi
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Model", "MediaBrowser.Model\MediaBrowser.Model.csproj", "{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Logging", "MediaBrowser.Logging\MediaBrowser.Logging.csproj", "{37032B77-FE2E-4EC5-B7E4-BAF634443578}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -35,6 +37,10 @@ Global
{32DFC600-CD2F-4B2D-B39A-3B4C6C32F9B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{32DFC600-CD2F-4B2D-B39A-3B4C6C32F9B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{32DFC600-CD2F-4B2D-B39A-3B4C6C32F9B4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {37032B77-FE2E-4EC5-B7E4-BAF634443578}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {37032B77-FE2E-4EC5-B7E4-BAF634443578}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {37032B77-FE2E-4EC5-B7E4-BAF634443578}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {37032B77-FE2E-4EC5-B7E4-BAF634443578}.Release|Any CPU.Build.0 = Release|Any CPU
{4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release|Any CPU.ActiveCfg = Release|Any CPU