mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-20 09:04:42 +01:00
assembly consolidation
This commit is contained in:
90
MediaBrowser.Common.Implementations/Logging/LogHelper.cs
Normal file
90
MediaBrowser.Common.Implementations/Logging/LogHelper.cs
Normal file
@@ -0,0 +1,90 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.Logging
|
||||
{
|
||||
/// <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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
201
MediaBrowser.Common.Implementations/Logging/NLogger.cs
Normal file
201
MediaBrowser.Common.Implementations/Logging/NLogger.cs
Normal file
@@ -0,0 +1,201 @@
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.Logging
|
||||
{
|
||||
/// <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);
|
||||
}
|
||||
}
|
||||
}
|
||||
144
MediaBrowser.Common.Implementations/Logging/NlogManager.cs
Normal file
144
MediaBrowser.Common.Implementations/Logging/NlogManager.cs
Normal file
@@ -0,0 +1,144 @@
|
||||
using MediaBrowser.Model.Logging;
|
||||
using NLog;
|
||||
using NLog.Config;
|
||||
using NLog.Targets;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.Logging
|
||||
{
|
||||
/// <summary>
|
||||
/// Class NlogManager
|
||||
/// </summary>
|
||||
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="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", level);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the log target.
|
||||
/// </summary>
|
||||
/// <param name="target">The target.</param>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="level">The level.</param>
|
||||
private void AddLogTarget(Target target, string name, LogSeverity level)
|
||||
{
|
||||
var config = LogManager.Configuration;
|
||||
|
||||
config.RemoveTarget(name);
|
||||
|
||||
target.Name = name;
|
||||
config.AddTarget(name, 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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -35,6 +35,9 @@
|
||||
<RunPostBuildEvent>Always</RunPostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="NLog">
|
||||
<HintPath>..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="protobuf-net">
|
||||
<HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath>
|
||||
</Reference>
|
||||
@@ -56,6 +59,9 @@
|
||||
</Compile>
|
||||
<Compile Include="BaseApplicationHost.cs" />
|
||||
<Compile Include="BaseApplicationPaths.cs" />
|
||||
<Compile Include="Logging\LogHelper.cs" />
|
||||
<Compile Include="Logging\NLogger.cs" />
|
||||
<Compile Include="Logging\NlogManager.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="ScheduledTasks\ScheduledTaskWorker.cs" />
|
||||
<Compile Include="ScheduledTasks\TaskManager.cs" />
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="NLog" version="2.0.0.2000" targetFramework="net45" />
|
||||
<package id="protobuf-net" version="2.0.0.621" targetFramework="net45" />
|
||||
<package id="ServiceStack.Text" version="3.9.37" targetFramework="net45" />
|
||||
<package id="SimpleInjector" version="2.0.0-beta5" targetFramework="net45" />
|
||||
|
||||
Reference in New Issue
Block a user