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 @@ - - - + + + - +