LogHelper.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System;
  2. using System.Text;
  3. namespace MediaBrowser.Logging.Nlog
  4. {
  5. /// <summary>
  6. /// Class LogHelper
  7. /// </summary>
  8. public static class LogHelper
  9. {
  10. /// <summary>
  11. /// Gets the log message.
  12. /// </summary>
  13. /// <param name="exception">The exception.</param>
  14. /// <returns>StringBuilder.</returns>
  15. public static StringBuilder GetLogMessage(Exception exception)
  16. {
  17. var messageText = new StringBuilder();
  18. messageText.AppendLine(exception.Message);
  19. messageText.AppendLine(exception.GetType().FullName);
  20. LogExceptionData(messageText, exception);
  21. messageText.AppendLine(exception.StackTrace ?? "No Stack Trace Available");
  22. // Log the InnerExceptions, if any
  23. AppendInnerExceptions(messageText, exception);
  24. messageText.AppendLine(string.Empty);
  25. return messageText;
  26. }
  27. /// <summary>
  28. /// Appends the inner exceptions.
  29. /// </summary>
  30. /// <param name="messageText">The message text.</param>
  31. /// <param name="e">The e.</param>
  32. private static void AppendInnerExceptions(StringBuilder messageText, Exception e)
  33. {
  34. var aggregate = e as AggregateException;
  35. if (aggregate != null && aggregate.InnerExceptions != null)
  36. {
  37. foreach (var ex in aggregate.InnerExceptions)
  38. {
  39. AppendInnerException(messageText, ex);
  40. }
  41. }
  42. else if (e.InnerException != null)
  43. {
  44. AppendInnerException(messageText, e.InnerException);
  45. }
  46. }
  47. /// <summary>
  48. /// Appends the inner exception.
  49. /// </summary>
  50. /// <param name="messageText">The message text.</param>
  51. /// <param name="e">The e.</param>
  52. private static void AppendInnerException(StringBuilder messageText, Exception e)
  53. {
  54. messageText.AppendLine("InnerException: " + e.GetType().FullName);
  55. messageText.AppendLine(e.Message);
  56. LogExceptionData(messageText, e);
  57. if (e.StackTrace != null)
  58. {
  59. messageText.AppendLine(e.StackTrace);
  60. }
  61. }
  62. /// <summary>
  63. /// Logs the exception data.
  64. /// </summary>
  65. /// <param name="messageText">The message text.</param>
  66. /// <param name="e">The e.</param>
  67. private static void LogExceptionData(StringBuilder messageText, Exception e)
  68. {
  69. foreach (var key in e.Data.Keys)
  70. {
  71. messageText.AppendLine(key + ": " + e.Data[key]);
  72. }
  73. }
  74. }
  75. }