diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-21 20:26:35 -0500 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-21 20:26:35 -0500 |
| commit | fdafa596832eae13cebcf5bbe5fa867f7ba068f0 (patch) | |
| tree | eee891c8f11564d4b14868d11f4758f243c112ce /MediaBrowser.Logging.NLog | |
| parent | 931c0ea455161b8ee00005a0ffd1f8afab41f7bb (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.cs | 90 | ||||
| -rw-r--r-- | MediaBrowser.Logging.NLog/MediaBrowser.Logging.NLog.csproj | 70 | ||||
| -rw-r--r-- | MediaBrowser.Logging.NLog/NLogger.cs | 201 | ||||
| -rw-r--r-- | MediaBrowser.Logging.NLog/NlogManager.cs | 50 | ||||
| -rw-r--r-- | MediaBrowser.Logging.NLog/Properties/AssemblyInfo.cs | 36 | ||||
| -rw-r--r-- | MediaBrowser.Logging.NLog/packages.config | 4 |
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 |
