diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index 81cace4f..7baeebb2 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -33,7 +33,7 @@
-
+
diff --git a/src/ZeroLog.Benchmarks/FodyWeavers.xsd b/src/ZeroLog.Benchmarks/FodyWeavers.xsd
index 9d212489..15adf790 100644
--- a/src/ZeroLog.Benchmarks/FodyWeavers.xsd
+++ b/src/ZeroLog.Benchmarks/FodyWeavers.xsd
@@ -35,6 +35,30 @@
+
+
+ Defines how warnings should be handled. Default value: Warnings
+
+
+
+
+
+ Emit build warnings (this is the default).
+
+
+
+
+ Do not emit warnings.
+
+
+
+
+ Treat warnings as errors.
+
+
+
+
+
diff --git a/src/ZeroLog.Benchmarks/ZeroLog.Benchmarks.csproj b/src/ZeroLog.Benchmarks/ZeroLog.Benchmarks.csproj
index 012b5f64..2f5ca8d8 100644
--- a/src/ZeroLog.Benchmarks/ZeroLog.Benchmarks.csproj
+++ b/src/ZeroLog.Benchmarks/ZeroLog.Benchmarks.csproj
@@ -14,12 +14,11 @@
-
-
+
+
-
diff --git a/src/ZeroLog.Tests/Config/ConfiguratorTests.cs b/src/ZeroLog.Tests/Config/ConfiguratorTests.cs
index 8ca96248..1dbd9396 100644
--- a/src/ZeroLog.Tests/Config/ConfiguratorTests.cs
+++ b/src/ZeroLog.Tests/Config/ConfiguratorTests.cs
@@ -1,10 +1,9 @@
using System.Linq;
-using Jil;
+using Newtonsoft.Json;
using NFluent;
using NUnit.Framework;
using ZeroLog.Appenders;
using ZeroLog.Config;
-using ZeroLog.ConfigResolvers;
namespace ZeroLog.Tests.Config
{
@@ -14,8 +13,12 @@ public class ConfiguratorTests
[Test]
public void should_load_configuration()
{
- var appenderA = new AppenderDefinition { Name = "A", AppenderTypeName = nameof(ConsoleAppender), AppenderJsonConfig = JSON.Serialize(new DefaultAppenderConfig{PrefixPattern = "[%level] @ %time - %logger: " })};
- var appenderB = new AppenderDefinition { Name = "B", AppenderTypeName = nameof(DateAndSizeRollingFileAppender), AppenderJsonConfig = JSON.Serialize(new DateAndSizeRollingFileAppenderConfig { FilePathRoot = "totopath " }) };
+ var appenderAConfig = new DefaultAppenderConfig { PrefixPattern = "[%level] @ %time - %logger: " };
+ var appenderBConfig = new DateAndSizeRollingFileAppenderConfig { FilePathRoot = "totopath " };
+
+ var appenderA = new AppenderDefinition { Name = "A", AppenderTypeName = nameof(ConsoleAppender), AppenderJsonConfig = appenderAConfig };
+ var appenderB = new AppenderDefinition { Name = "B", AppenderTypeName = nameof(DateAndSizeRollingFileAppender), AppenderJsonConfig = appenderBConfig };
+
var config = new ZeroLogJsonConfiguration
{
LogEventBufferSize = 5,
@@ -24,13 +27,13 @@ public void should_load_configuration()
{
Level = Level.Warn,
LogEventPoolExhaustionStrategy = LogEventPoolExhaustionStrategy.DropLogMessage,
- AppenderReferences = new []{ "A" },
-
+ AppenderReferences = new[] { "A" },
},
Appenders = new[] { appenderA, appenderB },
- Loggers = new[] {new LoggerDefinition{ Name = "Abc.Zebus", Level = Level.Debug, AppenderReferences = new []{ "B" } }}
+ Loggers = new[] { new LoggerDefinition { Name = "Abc.Zebus", Level = Level.Debug, AppenderReferences = new[] { "B" } } }
};
- var configJson = JSON.Serialize(config, Options.PrettyPrint);
+
+ var configJson = JsonConvert.SerializeObject(config);
var loadedConfig = JsonConfigurator.DeserializeConfiguration(configJson);
@@ -42,11 +45,18 @@ public void should_load_configuration()
Check.That(loadedConfig.Appenders.Single(a => a.Name == "A").Name).Equals(appenderA.Name);
Check.That(loadedConfig.Appenders.Single(a => a.Name == "A").AppenderTypeName).Equals(appenderA.AppenderTypeName);
- Check.That(loadedConfig.Appenders.Single(a => a.Name == "A").AppenderJsonConfig).Equals(appenderA.AppenderJsonConfig);
Check.That(loadedConfig.Appenders.Single(a => a.Name == "B").Name).Equals(appenderB.Name);
Check.That(loadedConfig.Appenders.Single(a => a.Name == "B").AppenderTypeName).Equals(appenderB.AppenderTypeName);
- Check.That(loadedConfig.Appenders.Single(a => a.Name == "B").AppenderJsonConfig).Equals(appenderB.AppenderJsonConfig);
+
+ var appenderALoadedConfig = (DefaultAppenderConfig)AppenderFactory.GetAppenderParameters(loadedConfig.Appenders.Single(a => a.Name == "A"), typeof(DefaultAppenderConfig));
+ Check.That(appenderALoadedConfig.PrefixPattern).IsEqualTo(appenderAConfig.PrefixPattern);
+
+ var appenderBLoadedConfig = (DateAndSizeRollingFileAppenderConfig)AppenderFactory.GetAppenderParameters(loadedConfig.Appenders.Single(a => a.Name == "B"), typeof(DateAndSizeRollingFileAppenderConfig));
+ Check.That(appenderBLoadedConfig.Extension).IsEqualTo(appenderBConfig.Extension);
+ Check.That(appenderBLoadedConfig.PrefixPattern).IsEqualTo(appenderBConfig.PrefixPattern);
+ Check.That(appenderBLoadedConfig.FilePathRoot).IsEqualTo(appenderBConfig.FilePathRoot);
+ Check.That(appenderBLoadedConfig.MaxFileSizeInBytes).IsEqualTo(appenderBConfig.MaxFileSizeInBytes);
}
[Test]
@@ -68,7 +78,7 @@ public void should_handle_missing_part()
{
""Name"": ""B"",
""AppenderTypeName"": ""DateAndSizeRollingFileAppender"",
- ""AppenderJsonConfig"": ""{\""FilePathRoot\"":\""totopath \""}""
+ ""AppenderJsonConfig"": {""FilePathRoot"":""totopath ""}
}
],
@@ -87,6 +97,9 @@ public void should_handle_missing_part()
Check.That(config.RootLogger.LogEventPoolExhaustionStrategy).Equals(LogEventPoolExhaustionStrategy.Default);
Check.That(config.LogEventBufferSize).Equals(new ZeroLogJsonConfiguration().LogEventBufferSize);
Check.That(config.LogEventQueueSize).Equals(new ZeroLogJsonConfiguration().LogEventQueueSize);
+
+ var appenderConfig = (DateAndSizeRollingFileAppenderConfig)AppenderFactory.GetAppenderParameters(config.Appenders[1], typeof(DateAndSizeRollingFileAppenderConfig));
+ Check.That(appenderConfig.FilePathRoot).IsEqualTo("totopath ");
}
}
}
diff --git a/src/ZeroLog/Appenders/AppenderFactory.cs b/src/ZeroLog/Appenders/AppenderFactory.cs
index bbc24401..2fea253b 100644
--- a/src/ZeroLog/Appenders/AppenderFactory.cs
+++ b/src/ZeroLog/Appenders/AppenderFactory.cs
@@ -1,6 +1,7 @@
using System;
using System.Linq;
-using Jil;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
using ZeroLog.Config;
namespace ZeroLog.Appenders
@@ -40,11 +41,22 @@ public static IAppender CreateAppender(AppenderDefinition definition)
.FirstOrDefault(x => x != null);
}
- private static object GetAppenderParameters(AppenderDefinition definition, Type appenderParameterType)
+ internal static object? GetAppenderParameters(AppenderDefinition definition, Type appenderParameterType)
{
- var appenderParameterJson = JSON.SerializeDynamic(definition.AppenderJsonConfig);
- var appenderParameters = (object)JSON.Deserialize(appenderParameterJson, appenderParameterType);
- return appenderParameters;
+ switch (definition.AppenderJsonConfig)
+ {
+ case null:
+ return null;
+
+ case JObject jObject:
+ var json = jObject.ToString(Formatting.None);
+ return JsonConvert.DeserializeObject(json, appenderParameterType);
+
+ case object obj:
+ return appenderParameterType.IsInstanceOfType(obj)
+ ? obj
+ : null;
+ }
}
private static Type? GetAppenderParameterType(Type? appenderType)
diff --git a/src/ZeroLog/FodyWeavers.xsd b/src/ZeroLog/FodyWeavers.xsd
index 9d212489..15adf790 100644
--- a/src/ZeroLog/FodyWeavers.xsd
+++ b/src/ZeroLog/FodyWeavers.xsd
@@ -35,6 +35,30 @@
+
+
+ Defines how warnings should be handled. Default value: Warnings
+
+
+
+
+
+ Emit build warnings (this is the default).
+
+
+
+
+ Do not emit warnings.
+
+
+
+
+ Treat warnings as errors.
+
+
+
+
+
diff --git a/src/ZeroLog/Utils/JsonExtensions.cs b/src/ZeroLog/Utils/JsonExtensions.cs
index 0d76cc86..0546f6cb 100644
--- a/src/ZeroLog/Utils/JsonExtensions.cs
+++ b/src/ZeroLog/Utils/JsonExtensions.cs
@@ -1,10 +1,10 @@
-using Jil;
+using Newtonsoft.Json;
namespace ZeroLog.Utils
{
public static class JsonExtensions
{
public static T DeserializeOrDefault(string? json, T @default)
- => string.IsNullOrEmpty(json) ? @default : JSON.Deserialize(json);
+ => string.IsNullOrEmpty(json) ? @default : JsonConvert.DeserializeObject(json!);
}
}
diff --git a/src/ZeroLog/ZeroLog.csproj b/src/ZeroLog/ZeroLog.csproj
index ac625f9c..176acc11 100644
--- a/src/ZeroLog/ZeroLog.csproj
+++ b/src/ZeroLog/ZeroLog.csproj
@@ -10,11 +10,11 @@
-
-
-
+
+
+
-
+