aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Logging.NLog
diff options
context:
space:
mode:
authorLukePulverenti <luke.pulverenti@gmail.com>2013-02-21 20:26:35 -0500
committerLukePulverenti <luke.pulverenti@gmail.com>2013-02-21 20:26:35 -0500
commitfdafa596832eae13cebcf5bbe5fa867f7ba068f0 (patch)
treeeee891c8f11564d4b14868d11f4758f243c112ce /MediaBrowser.Logging.NLog
parent931c0ea455161b8ee00005a0ffd1f8afab41f7bb (diff)
Removed System.Windows.Forms dependancy from Common. Almost done removing NLog dependancy.
Diffstat (limited to 'MediaBrowser.Logging.NLog')
-rw-r--r--MediaBrowser.Logging.NLog/LogHelper.cs90
-rw-r--r--MediaBrowser.Logging.NLog/MediaBrowser.Logging.NLog.csproj70
-rw-r--r--MediaBrowser.Logging.NLog/NLogger.cs201
-rw-r--r--MediaBrowser.Logging.NLog/NlogManager.cs50
-rw-r--r--MediaBrowser.Logging.NLog/Properties/AssemblyInfo.cs36
-rw-r--r--MediaBrowser.Logging.NLog/packages.config4
6 files changed, 451 insertions, 0 deletions
diff --git a/MediaBrowser.Logging.NLog/LogHelper.cs b/MediaBrowser.Logging.NLog/LogHelper.cs
new file mode 100644
index 000000000..93df4b2aa
--- /dev/null
+++ b/MediaBrowser.Logging.NLog/LogHelper.cs
@@ -0,0 +1,90 @@
+using System;
+using System.Text;
+
+namespace MediaBrowser.Logging.Nlog
+{
+ /// <summary>
+ /// Class LogHelper
+ /// </summary>
+ public static class LogHelper
+ {
+ /// <summary>
+ /// Gets the log message.
+ /// </summary>
+ /// <param name="exception">The exception.</param>
+ /// <returns>StringBuilder.</returns>
+ public static StringBuilder GetLogMessage(Exception exception)
+ {
+ var messageText = new StringBuilder();
+
+ messageText.AppendLine(exception.Message);
+
+ messageText.AppendLine(exception.GetType().FullName);
+
+ LogExceptionData(messageText, exception);
+
+ messageText.AppendLine(exception.StackTrace ?? "No Stack Trace Available");
+
+ // Log the InnerExceptions, if any
+ AppendInnerExceptions(messageText, exception);
+
+ messageText.AppendLine(string.Empty);
+
+ return messageText;
+ }
+
+ /// <summary>
+ /// Appends the inner exceptions.
+ /// </summary>
+ /// <param name="messageText">The message text.</param>
+ /// <param name="e">The e.</param>
+ private static void AppendInnerExceptions(StringBuilder messageText, Exception e)
+ {
+ var aggregate = e as AggregateException;
+
+ if (aggregate != null && aggregate.InnerExceptions != null)
+ {
+ foreach (var ex in aggregate.InnerExceptions)
+ {
+ AppendInnerException(messageText, ex);
+ }
+ }
+
+ else if (e.InnerException != null)
+ {
+ AppendInnerException(messageText, e.InnerException);
+ }
+ }
+
+ /// <summary>
+ /// Appends the inner exception.
+ /// </summary>
+ /// <param name="messageText">The message text.</param>
+ /// <param name="e">The e.</param>
+ private static void AppendInnerException(StringBuilder messageText, Exception e)
+ {
+ messageText.AppendLine("InnerException: " + e.GetType().FullName);
+ messageText.AppendLine(e.Message);
+
+ LogExceptionData(messageText, e);
+
+ if (e.StackTrace != null)
+ {
+ messageText.AppendLine(e.StackTrace);
+ }
+ }
+
+ /// <summary>
+ /// Logs the exception data.
+ /// </summary>
+ /// <param name="messageText">The message text.</param>
+ /// <param name="e">The e.</param>
+ private static void LogExceptionData(StringBuilder messageText, Exception e)
+ {
+ foreach (var key in e.Data.Keys)
+ {
+ messageText.AppendLine(key + ": " + e.Data[key]);
+ }
+ }
+ }
+}
diff --git a/MediaBrowser.Logging.NLog/MediaBrowser.Logging.NLog.csproj b/MediaBrowser.Logging.NLog/MediaBrowser.Logging.NLog.csproj
new file mode 100644
index 000000000..e24373aeb
--- /dev/null
+++ b/MediaBrowser.Logging.NLog/MediaBrowser.Logging.NLog.csproj
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{67310740-0EC4-4DC2-9921-33DF38B20167}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>MediaBrowser.Logging.NLog</RootNamespace>
+ <AssemblyName>MediaBrowser.Logging.NLog</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
+ <RestorePackages>true</RestorePackages>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="NLog">
+ <HintPath>..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="LogHelper.cs" />
+ <Compile Include="NLogger.cs" />
+ <Compile Include="NlogManager.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj">
+ <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
+ <Name>MediaBrowser.Model</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <Import Project="$(SolutionDir)\.nuget\nuget.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/MediaBrowser.Logging.NLog/NLogger.cs b/MediaBrowser.Logging.NLog/NLogger.cs
new file mode 100644
index 000000000..b3aedbf7c
--- /dev/null
+++ b/MediaBrowser.Logging.NLog/NLogger.cs
@@ -0,0 +1,201 @@
+using MediaBrowser.Model.Logging;
+using System;
+using System.Text;
+
+namespace MediaBrowser.Logging.Nlog
+{
+ /// <summary>
+ /// Class NLogger
+ /// </summary>
+ public class NLogger : ILogger
+ {
+ /// <summary>
+ /// The _logger
+ /// </summary>
+ private readonly NLog.Logger _logger;
+
+ /// <summary>
+ /// The _lock object
+ /// </summary>
+ private static readonly object LockObject = new object();
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="NLogger" /> class.
+ /// </summary>
+ /// <param name="name">The name.</param>
+ public NLogger(string name)
+ {
+ lock (LockObject)
+ {
+ _logger = NLog.LogManager.GetLogger(name);
+ }
+ }
+
+ /// <summary>
+ /// Infoes the specified message.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="paramList">The param list.</param>
+ public void Info(string message, params object[] paramList)
+ {
+ _logger.Info(message, paramList);
+ }
+
+ /// <summary>
+ /// Errors the specified message.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="paramList">The param list.</param>
+ public void Error(string message, params object[] paramList)
+ {
+ _logger.Error(message, paramList);
+ }
+
+ /// <summary>
+ /// Warns the specified message.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="paramList">The param list.</param>
+ public void Warn(string message, params object[] paramList)
+ {
+ _logger.Warn(message, paramList);
+ }
+
+ /// <summary>
+ /// Debugs the specified message.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="paramList">The param list.</param>
+ public void Debug(string message, params object[] paramList)
+ {
+ _logger.Debug(message, paramList);
+ }
+
+ /// <summary>
+ /// Logs the exception.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="exception">The exception.</param>
+ /// <param name="paramList">The param list.</param>
+ /// <exception cref="System.NotImplementedException"></exception>
+ public void ErrorException(string message, Exception exception, params object[] paramList)
+ {
+ LogException(LogSeverity.Error, message, exception, paramList);
+ }
+
+ /// <summary>
+ /// Logs the exception.
+ /// </summary>
+ /// <param name="level">The level.</param>
+ /// <param name="message">The message.</param>
+ /// <param name="exception">The exception.</param>
+ /// <param name="paramList">The param list.</param>
+ private void LogException(LogSeverity level, string message, Exception exception, params object[] paramList)
+ {
+ message = FormatMessage(message, paramList).Replace(Environment.NewLine, ". ");
+
+ var messageText = LogHelper.GetLogMessage(exception);
+
+ LogMultiline(message, level, messageText);
+ }
+
+ /// <summary>
+ /// Formats the message.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="paramList">The param list.</param>
+ /// <returns>System.String.</returns>
+ private static string FormatMessage(string message, params object[] paramList)
+ {
+ if (paramList != null)
+ {
+ for (var i = 0; i < paramList.Length; i++)
+ {
+ message = message.Replace("{" + i + "}", paramList[i].ToString());
+ }
+ }
+
+ return message;
+ }
+
+ /// <summary>
+ /// Logs the multiline.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="severity">The severity.</param>
+ /// <param name="additionalContent">Content of the additional.</param>
+ public void LogMultiline(string message, LogSeverity severity, StringBuilder additionalContent)
+ {
+ additionalContent.Insert(0, message + Environment.NewLine);
+
+ const char tabChar = '\t';
+
+ var text = additionalContent.ToString()
+ .Replace(Environment.NewLine, Environment.NewLine + tabChar)
+ .TrimEnd(tabChar);
+
+ if (text.EndsWith(Environment.NewLine))
+ {
+ text = text.Substring(0, text.LastIndexOf(Environment.NewLine, StringComparison.OrdinalIgnoreCase));
+ }
+
+ _logger.Log(GetLogLevel(severity), text);
+ }
+
+ /// <summary>
+ /// Gets the log level.
+ /// </summary>
+ /// <param name="severity">The severity.</param>
+ /// <returns>NLog.LogLevel.</returns>
+ private NLog.LogLevel GetLogLevel(LogSeverity severity)
+ {
+ switch (severity)
+ {
+ case LogSeverity.Debug:
+ return NLog.LogLevel.Debug;
+ case LogSeverity.Error:
+ return NLog.LogLevel.Error;
+ case LogSeverity.Warn:
+ return NLog.LogLevel.Warn;
+ case LogSeverity.Fatal:
+ return NLog.LogLevel.Fatal;
+ case LogSeverity.Info:
+ return NLog.LogLevel.Info;
+ default:
+ throw new ArgumentException("Unknown LogSeverity: " + severity.ToString());
+ }
+ }
+
+ /// <summary>
+ /// Logs the specified severity.
+ /// </summary>
+ /// <param name="severity">The severity.</param>
+ /// <param name="message">The message.</param>
+ /// <param name="paramList">The param list.</param>
+ public void Log(LogSeverity severity, string message, params object[] paramList)
+ {
+ _logger.Log(GetLogLevel(severity), message, paramList);
+ }
+
+ /// <summary>
+ /// Fatals the specified message.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="paramList">The param list.</param>
+ public void Fatal(string message, params object[] paramList)
+ {
+ _logger.Fatal(message, paramList);
+ }
+
+ /// <summary>
+ /// Fatals the exception.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="exception">The exception.</param>
+ /// <param name="paramList">The param list.</param>
+ public void FatalException(string message, Exception exception, params object[] paramList)
+ {
+ LogException(LogSeverity.Fatal, message, exception, paramList);
+ }
+ }
+}
diff --git a/MediaBrowser.Logging.NLog/NlogManager.cs b/MediaBrowser.Logging.NLog/NlogManager.cs
new file mode 100644
index 000000000..4d6aeadd8
--- /dev/null
+++ b/MediaBrowser.Logging.NLog/NlogManager.cs
@@ -0,0 +1,50 @@
+using NLog;
+using NLog.Config;
+using NLog.Targets;
+
+namespace MediaBrowser.Logging.Nlog
+{
+ /// <summary>
+ /// Class NlogManager
+ /// </summary>
+ public static class NlogManager
+ {
+ /// <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)
+ {
+ var logFile = new FileTarget();
+
+ logFile.FileName = path;
+ logFile.Layout = "${longdate}, ${level}, ${logger}, ${message}";
+
+ AddLogTarget(logFile, "ApplicationLogFile", enableDebugLogging);
+ }
+
+ /// <summary>
+ /// Adds the log target.
+ /// </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)
+ {
+ var config = LogManager.Configuration;
+
+ config.RemoveTarget(name);
+
+ target.Name = name;
+ config.AddTarget(name, target);
+
+ var level = enableDebugLogging ? LogLevel.Debug : LogLevel.Info;
+
+ var rule = new LoggingRule("*", level, target);
+ config.LoggingRules.Add(rule);
+
+ LogManager.Configuration = config;
+ }
+ }
+}
diff --git a/MediaBrowser.Logging.NLog/Properties/AssemblyInfo.cs b/MediaBrowser.Logging.NLog/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..35e100281
--- /dev/null
+++ b/MediaBrowser.Logging.NLog/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+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.NLog")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MediaBrowser.Logging.NLog")]
+[assembly: AssemblyCopyright("Copyright © 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("095763bf-68a9-4d89-ad01-d0e3c1f5c11f")]
+
+// 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.NLog/packages.config b/MediaBrowser.Logging.NLog/packages.config
new file mode 100644
index 000000000..ede36938c
--- /dev/null
+++ b/MediaBrowser.Logging.NLog/packages.config
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="NLog" version="2.0.0.2000" targetFramework="net45" />
+</packages> \ No newline at end of file