LoggingExtensions.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using GreenTree.Nachtragsmanagement.Core;
  2. using GreenTree.Nachtragsmanagement.Core.Domain.Logging;
  3. using System;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace GreenTree.Nachtragsmanagement.Services.Logging
  10. {
  11. public static class LoggingExtensions
  12. {
  13. public static void Debug(this ILogger logger, string message, Exception exception = null,
  14. Core.Domain.User.User user = null)
  15. {
  16. FilteredLog(logger, LogLevel.Debug, message, exception, user);
  17. }
  18. public static void Information(this ILogger logger, string message, Exception exception = null,
  19. Core.Domain.User.User user = null)
  20. {
  21. FilteredLog(logger, LogLevel.Information, message, exception, user);
  22. }
  23. public static void Warning(this ILogger logger, string message, Exception exception = null,
  24. Core.Domain.User.User user = null)
  25. {
  26. FilteredLog(logger, LogLevel.Warning, message, exception, user);
  27. }
  28. public static void Error(this ILogger logger, string message, Exception exception = null,
  29. Core.Domain.User.User user = null)
  30. {
  31. FilteredLog(logger, LogLevel.Error, message, exception, user);
  32. }
  33. public static void Fatal(this ILogger logger, string message, Exception exception = null,
  34. Core.Domain.User.User user = null)
  35. {
  36. FilteredLog(logger, LogLevel.Fatal, message, exception, user);
  37. }
  38. private static void FilteredLog(ILogger logger, LogLevel level, string message, Exception exception = null,
  39. Core.Domain.User.User user = null)
  40. {
  41. //don't log thread abort exception
  42. if (exception is System.Threading.ThreadAbortException)
  43. return;
  44. if (logger.IsEnabled(level))
  45. {
  46. var fullMessage = exception == null
  47. ? string.Empty
  48. : exception.ToString();
  49. logger.InsertLog(level, message, null, fullMessage, user);
  50. }
  51. }
  52. public static void Entity(this ILogger logger, BaseEntity entity, LogEntityActivity activity, Core.Domain.User.User user = null)
  53. {
  54. if (entity == null)
  55. return;
  56. var header = String.Empty;
  57. var body = String.Empty;
  58. switch (activity)
  59. {
  60. case LogEntityActivity.Insert:
  61. header = String.Format("Entität \"{0}\" wurde hinzugefügt", entity.GetType().Name);
  62. break;
  63. case LogEntityActivity.Update:
  64. header = String.Format("Entität \"{0}\" mit der ID \"{1}\" wurde geändert", entity.GetType().Name, entity.Id);
  65. break;
  66. case LogEntityActivity.Delete:
  67. header = String.Format("Entität \"{0}\" mit der ID \"{1}\" wurde gelöscht", entity.GetType().Name, entity.Id);
  68. break;
  69. }
  70. if (activity == LogEntityActivity.Delete)
  71. logger.InsertLog(LogLevel.Information, header, entity, String.Empty, user);
  72. else
  73. {
  74. var properties = entity.GetType().GetProperties(System.Reflection.BindingFlags.GetProperty);
  75. foreach (var property in properties)
  76. {
  77. if (!property.PropertyType.Namespace.StartsWith("System")) continue;
  78. if (typeof(IEnumerable).IsAssignableFrom(property.PropertyType) && property.PropertyType != typeof(string))
  79. {
  80. var collection = property.GetValue(entity, null) as IEnumerable;
  81. body += String.Format("\t{0} = {1}\n", property.Name, String.Join(", ", collection));
  82. }
  83. else
  84. body += String.Format("\t{0} = {1}\n", property.Name, property.GetValue(entity));
  85. }
  86. var fullMessage = String.Format("{0}:\n{1}", header, body);
  87. logger.InsertLog(LogLevel.Information, header, entity, String.Empty, user);
  88. }
  89. }
  90. }
  91. }