Просмотр исходного кода

Erster Logging-Test erfolgreich!

Arne Diekmann 8 лет назад
Родитель
Сommit
faee685f6d

+ 1 - 1
GreenTree.Nachtragsmanagement.Services/Logging/DefaultLogger.cs

@@ -155,7 +155,7 @@ namespace GreenTree.Nachtragsmanagement.Services.Logging
                     : (int?)entity.Id,
                 EntityType = entity == null
                     ? null
-                    : entity.GetType().Name,
+                    : LoggingExtensions.GetTypeNameFromEfEntityType(entity),
                 PageUrl = _webHelper.GetThisPageUrl(true),
                 ReferrerUrl = _webHelper.GetUrlReferrer(),
                 CreatedOnUtc = DateTime.UtcNow

+ 32 - 6
GreenTree.Nachtragsmanagement.Services/Logging/LoggingExtensions.cs

@@ -65,17 +65,18 @@ namespace GreenTree.Nachtragsmanagement.Services.Logging
 
             var header = String.Empty;
             var body = String.Empty;
+            var entityType = GetTypeNameFromEfEntityType(entity);
 
             switch (activity)
             {
                 case LogEntityActivity.Insert:
-                    header = String.Format("Entität \"{0}\" wurde hinzugefügt", entity.GetType().Name);
+                    header = String.Format("Entität \"{0}\" wurde hinzugefügt", entityType);
                     break;
                 case LogEntityActivity.Update:
-                    header = String.Format("Entität \"{0}\" mit der ID \"{1}\" wurde geändert", entity.GetType().Name, entity.Id);
+                    header = String.Format("Entität \"{0}\" mit der ID \"{1}\" wurde geändert", entityType, entity.Id);
                     break;
                 case LogEntityActivity.Delete:
-                    header = String.Format("Entität \"{0}\" mit der ID \"{1}\" wurde gelöscht", entity.GetType().Name, entity.Id);
+                    header = String.Format("Entität \"{0}\" mit der ID \"{1}\" wurde gelöscht", entityType, entity.Id);
                     break;
             }
 
@@ -83,7 +84,7 @@ namespace GreenTree.Nachtragsmanagement.Services.Logging
                 logger.InsertLog(LogLevel.Information, header, entity, String.Empty, user);
             else
             {
-                var properties = entity.GetType().GetProperties(System.Reflection.BindingFlags.GetProperty);
+                var properties = entity.GetType().GetProperties();
 
                 foreach (var property in properties)
                 {
@@ -92,8 +93,19 @@ namespace GreenTree.Nachtragsmanagement.Services.Logging
                     if (typeof(IEnumerable).IsAssignableFrom(property.PropertyType) && property.PropertyType != typeof(string))
                     {
                         var collection = property.GetValue(entity, null) as IEnumerable;
+                        var collectionType = collection.GetType().GetGenericArguments()[0];
 
-                        body += String.Format("\t{0} = {1}\n", property.Name, String.Join(", ", collection));
+                        if (typeof(BaseEntity).IsAssignableFrom(collectionType))
+                        {
+                            var collectionValues = new List<object>();
+
+                            foreach (var value in collection)
+                                collectionValues.Add(value.GetType().GetProperty("Id").GetValue(value));
+
+                            body += String.Format("\t{0} = {1}\n", property.Name, String.Join(", ", collectionValues));
+                        }
+                        else
+                            body += String.Format("\t{0} = {1}\n", property.Name, String.Join(", ", collection));
                     }
                     else
                         body += String.Format("\t{0} = {1}\n", property.Name, property.GetValue(entity));
@@ -101,8 +113,22 @@ namespace GreenTree.Nachtragsmanagement.Services.Logging
 
                 var fullMessage = String.Format("{0}:\n{1}", header, body);
 
-                logger.InsertLog(LogLevel.Information, header, entity, String.Empty, user);
+                logger.InsertLog(LogLevel.Information, header, entity, fullMessage, user);
             }
         }
+
+        public static string GetTypeNameFromEfEntityType(BaseEntity entity)
+        {
+            if (entity == null) return null;
+
+            var type = entity.GetType();
+
+            if (type.Namespace == "System.Data.Entity.DynamicProxies")
+                return String.Join("_",
+                    type.Name.Split('_')
+                        .TakeWhile(s => s != type.Name.Split('_').Last()));
+
+            return type.Name;
+        }
     }
 }

+ 3 - 1
GreenTree.Nachtragsmanagement.Web.Framework/ApplicationContext.cs

@@ -27,6 +27,7 @@ using System.Web.Routing;
 using GreenTree.Nachtragsmanagement.Core.Authentication;
 using GreenTree.Nachtragsmanagement.Services.Appendix;
 using GreenTree.Nachtragsmanagement.Services.Scheduling;
+using GreenTree.Nachtragsmanagement.Services.Logging;
 
 namespace GreenTree.Nachtragsmanagement.Web.Framework
 {
@@ -107,14 +108,15 @@ namespace GreenTree.Nachtragsmanagement.Web.Framework
             builder.RegisterType<DbRelationService>().As<IDbRelationService>();
             builder.RegisterType<UserService>().As<IUserService>();
             builder.RegisterType<UserHelper>().As<IUserHelper>();
+            builder.RegisterType<WebHelper>().As<IWebHelper>();
             builder.RegisterType<AuthenticationService>().As<IAuthenticationService>();
             builder.RegisterType<SiteService>().As<ISiteService>();
             builder.RegisterType<DeviationService>().As<IDeviationService>();
             builder.RegisterType<AppendixService>().As<IAppendixService>();
             builder.RegisterType<MiscService>().As<IMiscService>();
+            builder.RegisterType<DefaultLogger>().As<ILogger>();
             builder.RegisterType<NotificationService>().As<INotificationService>();
             builder.RegisterType<PluginFinder>().As<IPluginFinder>();
-            builder.RegisterType<WebHelper>().As<IWebHelper>();
             builder.RegisterType<WebAppTypeFinder>().As<ITypeFinder>();
             builder.RegisterType<RoutePublisher>().As<IRoutePublisher>();
             builder.RegisterType<NotificationScheduler>().As<INotificationScheduler>();