private static object GetAppenderParameters(AppenderDefinition definition, Type appenderParameterType) { var appenderParameterJson = JSON.SerializeDynamic(definition.AppenderJsonConfig); var appenderParameters = (object)JSON.Deserialize(appenderParameterJson, appenderParameterType); return(appenderParameters); }
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); }
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); }
private static Type GetAppenderType(AppenderDefinition definition) { var appenderType = AppDomain.CurrentDomain.GetAssemblies() .Select(x => x.GetType(definition.AppenderTypeName)) .FirstOrDefault(x => x != null); return(appenderType); }
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)); }
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); }
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); }
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); }