LogHelper.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using System;
  2. using System.Text;
  3. namespace MediaBrowser.Common.Implementations.Logging
  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. AppendInnerExceptions(messageText, ex);
  41. }
  42. }
  43. else if (e.InnerException != null)
  44. {
  45. AppendInnerException(messageText, e.InnerException);
  46. AppendInnerExceptions(messageText, e.InnerException);
  47. }
  48. }
  49. /// <summary>
  50. /// Appends the inner exception.
  51. /// </summary>
  52. /// <param name="messageText">The message text.</param>
  53. /// <param name="e">The e.</param>
  54. private static void AppendInnerException(StringBuilder messageText, Exception e)
  55. {
  56. messageText.AppendLine("InnerException: " + e.GetType().FullName);
  57. messageText.AppendLine(e.Message);
  58. LogExceptionData(messageText, e);
  59. if (e.StackTrace != null)
  60. {
  61. messageText.AppendLine(e.StackTrace);
  62. }
  63. }
  64. /// <summary>
  65. /// Logs the exception data.
  66. /// </summary>
  67. /// <param name="messageText">The message text.</param>
  68. /// <param name="e">The e.</param>
  69. private static void LogExceptionData(StringBuilder messageText, Exception e)
  70. {
  71. foreach (var key in e.Data.Keys)
  72. {
  73. messageText.AppendLine(key + ": " + e.Data[key]);
  74. }
  75. }
  76. }
  77. }