NLogger.cs 7.5 KB

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