diff --git a/Pilz.Configuration/Pilz.Configuration.csproj b/Pilz.Configuration/Pilz.Configuration.csproj
index 122c128..32d3b58 100644
--- a/Pilz.Configuration/Pilz.Configuration.csproj
+++ b/Pilz.Configuration/Pilz.Configuration.csproj
@@ -7,10 +7,11 @@
- 3.2.4
+ 3.2.5
+
diff --git a/Pilz.Configuration/Settings.cs b/Pilz.Configuration/Settings.cs
index a523818..5150e07 100644
--- a/Pilz.Configuration/Settings.cs
+++ b/Pilz.Configuration/Settings.cs
@@ -1,4 +1,5 @@
-using Newtonsoft.Json;
+using Castle.Core.Logging;
+using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
@@ -12,6 +13,7 @@ public class Settings : ISettings
protected JsonSerializerSettings serializerSettings;
public virtual IReadOnlyCollection Childs => settings.Values;
+ public virtual ILogger Logger { get; set; } = NullLogger.Instance;
public virtual T Get() where T : ISettingsNode, ISettingsIdentifier
{
@@ -23,7 +25,10 @@ public class Settings : ISettings
if (Activator.CreateInstance() is T settingsNew)
settingsNew.Reset();
else
+ {
settingsNew = default;
+ Logger.WarnFormat("Not able to create new settings node instance {0}.", T.Identifier);
+ }
// Try deserialize
if (settingsJson.TryGetValue(T.Identifier, out var valueRaw))
@@ -32,11 +37,31 @@ public class Settings : ISettings
// Populate
if (settingsNew != null)
- serializer.Populate(valueRaw.CreateReader(), settingsNew);
+ {
+ try
+ {
+ serializer.Populate(valueRaw.CreateReader(), settingsNew);
+ Logger.InfoFormat("Populated settings node {0}.", T.Identifier);
+ }
+ catch (Exception ex)
+ {
+ Logger.Error("Error populating settings node instance.", ex);
+ }
+ }
// Deserialize (fallback)
else if (valueRaw.ToObject() is T settingsDeserialized)
- settingsNew = settingsDeserialized;
+ {
+ try
+ {
+ settingsNew = settingsDeserialized;
+ Logger.WarnFormat("Deserialied settings node {0} via fallback variant.", T.Identifier);
+ }
+ catch (Exception ex)
+ {
+ Logger.Error("Error deserializing settings node instance.", ex);
+ }
+ }
}
// Remember