Example #1
0
        private static object GetAppenderParameters(AppenderDefinition definition, Type appenderParameterType)
        {
            var appenderParameterJson = JSON.SerializeDynamic(definition.AppenderJsonConfig);
            var appenderParameters    = (object)JSON.Deserialize(appenderParameterJson, appenderParameterType);

            return(appenderParameters);
        }
Example #2
0
        public void should_resolve_appender_from_assembly_qualified_name()
        {
            var appenderDef = new AppenderDefinition
            {
                Name               = "ExtApp1",
                AppenderTypeName   = "ZeroLog.Tests.ExternalAppender.TestAppender, ZeroLog.Tests.ExternalAppender",
                AppenderJsonConfig = new DefaultAppenderConfig {
                    PrefixPattern = "[%level] @ %time - %logger: "
                }
            };

            var config = new ZeroLogJsonConfiguration
            {
                LogEventBufferSize = 5,
                LogEventQueueSize  = 7,
                RootLogger         = new LoggerDefinition
                {
                    Level = Level.Info,
                    LogEventPoolExhaustionStrategy = LogEventPoolExhaustionStrategy.DropLogMessage,
                    AppenderReferences             = new[] { "ExtApp1" },
                },
                Appenders = new[] { appenderDef },
            };

            var configResolver = new HierarchicalResolver();

            configResolver.Build(config);

            var appenders = configResolver.GetAllAppenders().ToList();

            Assert.AreEqual(1, appenders.Count);
            Assert.AreEqual("ZeroLog.Tests.ExternalAppender.TestAppender", ((GuardedAppender)appenders[0]).Appender.GetType().FullName);
        }
Example #3
0
        public void should_load_configuration()
        {
            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,
                LogEventQueueSize  = 7,
                RootLogger         = new LoggerDefinition
                {
                    Level = Level.Warn,
                    LogEventPoolExhaustionStrategy = LogEventPoolExhaustionStrategy.DropLogMessage,
                    AppenderReferences             = new[] { "A" },
                },
                Appenders = new[] { appenderA, appenderB },
                Loggers   = new[] { new LoggerDefinition {
                                        Name = "Abc.Zebus", Level = Level.Debug, AppenderReferences = new[] { "B" }
                                    } }
            };

            var configJson = JsonConvert.SerializeObject(config);

            var loadedConfig = JsonConfigurator.DeserializeConfiguration(configJson);

            Check.That(loadedConfig.LogEventBufferSize).Equals(config.LogEventBufferSize);
            Check.That(loadedConfig.LogEventQueueSize).Equals(config.LogEventQueueSize);

            Check.That(loadedConfig.RootLogger.Level).Equals(config.RootLogger.Level);
            Check.That(loadedConfig.RootLogger.AppenderReferences.Single()).Equals(config.RootLogger.AppenderReferences.Single());

            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 == "B").Name).Equals(appenderB.Name);
            Check.That(loadedConfig.Appenders.Single(a => a.Name == "B").AppenderTypeName).Equals(appenderB.AppenderTypeName);

            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);
        }
Example #4
0
        private static Type GetAppenderType(AppenderDefinition definition)
        {
            var appenderType = AppDomain.CurrentDomain.GetAssemblies()
                               .Select(x => x.GetType(definition.AppenderTypeName))
                               .FirstOrDefault(x => x != null);

            return(appenderType);
        }
Example #5
0
        private static Type GetAppenderType(AppenderDefinition definition)
        {
            // Check if we have an assembly-qualified name of a type
            if (definition.AppenderTypeName.Contains(","))
            {
                return(Type.GetType(definition.AppenderTypeName, true, false));
            }

            return(AppDomain.CurrentDomain.GetAssemblies()
                   .Select(x => x.GetType(definition.AppenderTypeName))
                   .FirstOrDefault(x => x != null));
        }
Example #6
0
        internal static object?GetAppenderParameters(AppenderDefinition definition, Type appenderParameterType)
        {
            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);
            }
        }
        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 config = new ZeroLogConfiguration
            {
                LogEventBufferSize = 5,
                LogEventQueueSize  = 7,
                RootLogger         = new LoggerDefinition
                {
                    Level = Level.Warn,
                    LogEventPoolExhaustionStrategy = LogEventPoolExhaustionStrategy.DropLogMessage,
                    AppenderReferences             = new [] { "A" },
                },
                Appenders = new[] { appenderA, appenderB },
                Loggers   = new[] { new LoggerDefinition {
                                        Name = "Abc.Zebus", Level = Level.Debug, AppenderReferences = new [] { "B" }
                                    } }
            };
            var configJson = JSON.Serialize(config, Options.PrettyPrint);

            var loadedConfig = JsonConfigurator.DeserializeConfiguration(configJson);

            Check.That(loadedConfig.LogEventBufferSize).Equals(config.LogEventBufferSize);
            Check.That(loadedConfig.LogEventQueueSize).Equals(config.LogEventQueueSize);

            Check.That(loadedConfig.RootLogger.Level).Equals(config.RootLogger.Level);
            Check.That(loadedConfig.RootLogger.AppenderReferences.Single()).Equals(config.RootLogger.AppenderReferences.Single());

            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);
        }
Example #8
0
        public static IAppender CreateAppender(AppenderDefinition definition)
        {
            var appenderType = GetAppenderType(definition);

            var appender = (IAppender)Activator.CreateInstance(appenderType);

            appender.Name = definition.Name;

            var appenderParameterType = GetAppenderParameterType(appenderType);

            if (appenderParameterType != null)
            {
                var appenderParameters = GetAppenderParameters(definition, appenderParameterType);

                var configureMethod = appenderType.GetMethod(nameof(IAppender <object> .Configure), new[] { appenderParameterType });
                configureMethod.Invoke(appender, new[] { appenderParameters });
            }

            return(appender);
        }
Example #9
0
        public static IAppender CreateAppender(AppenderDefinition definition)
        {
            var appenderType = GetAppenderType(definition) ?? throw new InvalidOperationException($"Appender type not found: {definition.AppenderTypeName}");

            var appender = (IAppender)Activator.CreateInstance(appenderType) !;

            appender.Name = definition.Name;

            var appenderParameterType = GetAppenderParameterType(appenderType);

            if (appenderParameterType != null)
            {
                var appenderParameters = GetAppenderParameters(definition, appenderParameterType);

                var configureMethod = appenderType.GetMethod(nameof(IAppender <object> .Configure), new[] { appenderParameterType });
                configureMethod?.Invoke(appender, new[] { appenderParameters });
            }

            return(appender);
        }