LoggingExtensions.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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 IBaseLogger 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 IBaseLogger 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 IBaseLogger 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 IBaseLogger 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 IBaseLogger 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(IBaseLogger 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 IBaseLogger 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. var entityType = GetTypeNameFromEfEntityType(entity);
  59. switch (activity)
  60. {
  61. case LogEntityActivity.Insert:
  62. header = String.Format("Entität \"{0}\" wurde hinzugefügt", entityType);
  63. break;
  64. case LogEntityActivity.Update:
  65. header = String.Format("Entität \"{0}\" mit der ID \"{1}\" wurde geändert", entityType, entity.Id);
  66. break;
  67. case LogEntityActivity.Delete:
  68. header = String.Format("Entität \"{0}\" mit der ID \"{1}\" wurde gelöscht", entityType, entity.Id);
  69. break;
  70. }
  71. if (activity == LogEntityActivity.Delete)
  72. logger.InsertLog(LogLevel.Information, header, entity, String.Empty, user);
  73. else
  74. {
  75. var properties = entity.GetType().GetProperties();
  76. foreach (var property in properties)
  77. {
  78. if (!property.PropertyType.Namespace.StartsWith("System")) continue;
  79. if (typeof(IEnumerable).IsAssignableFrom(property.PropertyType) && property.PropertyType != typeof(string))
  80. {
  81. var collection = property.GetValue(entity, null) as IEnumerable;
  82. var collectionType = collection.GetType().GetGenericArguments()[0];
  83. if (typeof(BaseEntity).IsAssignableFrom(collectionType))
  84. {
  85. var collectionValues = new List<object>();
  86. foreach (var value in collection)
  87. collectionValues.Add(value.GetType().GetProperty("Id").GetValue(value));
  88. body += String.Format("\t{0} = {1}\n", property.Name, String.Join(", ", collectionValues));
  89. }
  90. else
  91. body += String.Format("\t{0} = {1}\n", property.Name, String.Join(", ", collection));
  92. }
  93. else
  94. body += String.Format("\t{0} = {1}\n", property.Name, property.GetValue(entity));
  95. }
  96. var fullMessage = String.Format("{0}:\n{1}", header, body);
  97. logger.InsertLog(LogLevel.Information, header, entity, fullMessage, user);
  98. }
  99. }
  100. public static string GetTypeNameFromEfEntityType(BaseEntity entity)
  101. {
  102. if (entity == null) return null;
  103. var type = entity.GetType();
  104. if (type.Namespace == "System.Data.Entity.DynamicProxies")
  105. return String.Join("_",
  106. type.Name.Split('_')
  107. .TakeWhile(s => s != type.Name.Split('_').Last()));
  108. return type.Name;
  109. }
  110. }
  111. }