NLogger.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. using MediaBrowser.Model.Logging;
  2. using System;
  3. using System.Text;
  4. namespace MediaBrowser.Common.Implementations.Logging
  5. {
  6. /// <summary>
  7. /// Class NLogger
  8. /// </summary>
  9. public class NLogger : ILogger
  10. {
  11. /// <summary>
  12. /// The _logger
  13. /// </summary>
  14. private readonly NLog.Logger _logger;
  15. /// <summary>
  16. /// The _lock object
  17. /// </summary>
  18. private static readonly object LockObject = new object();
  19. /// <summary>
  20. /// Initializes a new instance of the <see cref="NLogger" /> class.
  21. /// </summary>
  22. /// <param name="name">The name.</param>
  23. public NLogger(string name)
  24. {
  25. lock (LockObject)
  26. {
  27. _logger = NLog.LogManager.GetLogger(name);
  28. }
  29. }
  30. /// <summary>
  31. /// Infoes the specified message.
  32. /// </summary>
  33. /// <param name="message">The message.</param>
  34. /// <param name="paramList">The param list.</param>
  35. public void Info(string message, params object[] paramList)
  36. {
  37. _logger.Info(message, paramList);
  38. }
  39. /// <summary>
  40. /// Errors the specified message.
  41. /// </summary>
  42. /// <param name="message">The message.</param>
  43. /// <param name="paramList">The param list.</param>
  44. public void Error(string message, params object[] paramList)
  45. {
  46. _logger.Error(message, paramList);
  47. }
  48. /// <summary>
  49. /// Warns the specified message.
  50. /// </summary>
  51. /// <param name="message">The message.</param>
  52. /// <param name="paramList">The param list.</param>
  53. public void Warn(string message, params object[] paramList)
  54. {
  55. _logger.Warn(message, paramList);
  56. }
  57. /// <summary>
  58. /// Debugs the specified message.
  59. /// </summary>
  60. /// <param name="message">The message.</param>
  61. /// <param name="paramList">The param list.</param>
  62. public void Debug(string message, params object[] paramList)
  63. {
  64. _logger.Debug(message, paramList);
  65. }
  66. /// <summary>
  67. /// Logs the exception.
  68. /// </summary>
  69. /// <param name="message">The message.</param>
  70. /// <param name="exception">The exception.</param>
  71. /// <param name="paramList">The param list.</param>
  72. /// <exception cref="System.NotImplementedException"></exception>
  73. public void ErrorException(string message, Exception exception, params object[] paramList)
  74. {
  75. LogException(LogSeverity.Error, message, exception, paramList);
  76. }
  77. /// <summary>
  78. /// Logs the exception.
  79. /// </summary>
  80. /// <param name="level">The level.</param>
  81. /// <param name="message">The message.</param>
  82. /// <param name="exception">The exception.</param>
  83. /// <param name="paramList">The param list.</param>
  84. private void LogException(LogSeverity level, string message, Exception exception, params object[] paramList)
  85. {
  86. message = FormatMessage(message, paramList).Replace(Environment.NewLine, ". ");
  87. var messageText = LogHelper.GetLogMessage(exception);
  88. LogMultiline(message, level, messageText);
  89. }
  90. /// <summary>
  91. /// Formats the message.
  92. /// </summary>
  93. /// <param name="message">The message.</param>
  94. /// <param name="paramList">The param list.</param>
  95. /// <returns>System.String.</returns>
  96. private static string FormatMessage(string message, params object[] paramList)
  97. {
  98. if (paramList != null)
  99. {
  100. for (var i = 0; i < paramList.Length; i++)
  101. {
  102. message = message.Replace("{" + i + "}", paramList[i].ToString());
  103. }
  104. }
  105. return message;
  106. }
  107. /// <summary>
  108. /// Logs the multiline.
  109. /// </summary>
  110. /// <param name="message">The message.</param>
  111. /// <param name="severity">The severity.</param>
  112. /// <param name="additionalContent">Content of the additional.</param>
  113. public void LogMultiline(string message, LogSeverity severity, StringBuilder additionalContent)
  114. {
  115. additionalContent.Insert(0, message + Environment.NewLine);
  116. const char tabChar = '\t';
  117. var text = additionalContent.ToString()
  118. .Replace(Environment.NewLine, Environment.NewLine + tabChar)
  119. .TrimEnd(tabChar);
  120. if (text.EndsWith(Environment.NewLine))
  121. {
  122. text = text.Substring(0, text.LastIndexOf(Environment.NewLine, StringComparison.OrdinalIgnoreCase));
  123. }
  124. _logger.Log(GetLogLevel(severity), text);
  125. }
  126. /// <summary>
  127. /// Gets the log level.
  128. /// </summary>
  129. /// <param name="severity">The severity.</param>
  130. /// <returns>NLog.LogLevel.</returns>
  131. private NLog.LogLevel GetLogLevel(LogSeverity severity)
  132. {
  133. switch (severity)
  134. {
  135. case LogSeverity.Debug:
  136. return NLog.LogLevel.Debug;
  137. case LogSeverity.Error:
  138. return NLog.LogLevel.Error;
  139. case LogSeverity.Warn:
  140. return NLog.LogLevel.Warn;
  141. case LogSeverity.Fatal:
  142. return NLog.LogLevel.Fatal;
  143. case LogSeverity.Info:
  144. return NLog.LogLevel.Info;
  145. default:
  146. throw new ArgumentException("Unknown LogSeverity: " + severity.ToString());
  147. }
  148. }
  149. /// <summary>
  150. /// Logs the specified severity.
  151. /// </summary>
  152. /// <param name="severity">The severity.</param>
  153. /// <param name="message">The message.</param>
  154. /// <param name="paramList">The param list.</param>
  155. public void Log(LogSeverity severity, string message, params object[] paramList)
  156. {
  157. _logger.Log(GetLogLevel(severity), message, paramList);
  158. }
  159. /// <summary>
  160. /// Fatals the specified message.
  161. /// </summary>
  162. /// <param name="message">The message.</param>
  163. /// <param name="paramList">The param list.</param>
  164. public void Fatal(string message, params object[] paramList)
  165. {
  166. _logger.Fatal(message, paramList);
  167. }
  168. /// <summary>
  169. /// Fatals the exception.
  170. /// </summary>
  171. /// <param name="message">The message.</param>
  172. /// <param name="exception">The exception.</param>
  173. /// <param name="paramList">The param list.</param>
  174. public void FatalException(string message, Exception exception, params object[] paramList)
  175. {
  176. LogException(LogSeverity.Fatal, message, exception, paramList);
  177. }
  178. }
  179. }