Hello, I'm trying to create different logger with different hostname and port for different client requests to the server. If a new client request comes, I will store the information in the thread local object and based on the information I need to append a new logger object to the existing configuration object using CompositeConfiguration and update loggers in the logger context. I'm using the name of the logger object not to have a package level hierarchy but just as a named (client name) logger.
Currently I'm getting the below error when I try to append new syslog using CompositeConfiguration at the line logContext.reconfigure(compositeConfiguration); ERROR StatusConsoleListener Appender references must contain a reference ERROR StatusConsoleListener Null object returned for AppenderRef in Logger. ERROR StatusConsoleListener No appender name provided ERROR StatusConsoleListener Could not create plugin of type class org.apache.logging.log4j.core.appender.SyslogAppender for element Syslog org.apache.logging.log4j.core.config.ConfigurationException: Arguments given for element Syslog are invalid: field 'name' has invalid value 'null' at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.injectFields(PluginBuilder.java:199) ..... at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:621) at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:715) ERROR StatusConsoleListener Null object returned for Syslog in Appenders. Below is my implementation ConfigurationBuilder<BuiltConfiguration> builder1 = ConfigurationBuilderFactory.newConfigurationBuilder(); AppenderComponentBuilder syslogAppender1 = builder1.newAppender("syslog", "Syslog") .addAttribute("protocol", "UDP") .addAttribute("host", hostname) .addAttribute("port", port1) .addAttribute("appName", "serviceName") .addAttribute("id", "serviceName") .addAttribute("facility", "LOCAL0") .addAttribute("newLine", true) .addAttribute("format", "RFC5424") .addAttribute("ignoreExceptions", false); syslogAppender1.add(builder1.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.DENY) .addAttribute("level", Level.DEBUG)); builder1.add(syslogAppender1); builder1.add(builder1.newLogger("client1", Level.DEBUG) .add(builder1.newAppenderRef("syslog")) .addAttribute("additivity", false)); Configurator.reconfigure(builder1.build()); Logger logger = LogManager.getLogger("client1"); logger.info("client1 message1"); ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder(); AppenderComponentBuilder syslogAppender = builder.newAppender("syslog1", "Syslog") .addAttribute("protocol", "UDP") .addAttribute("host", hostname) .addAttribute("port", port2) .addAttribute("appName", "serviceName") .addAttribute("id", "serviceName") .addAttribute("facility", "LOCAL0") .addAttribute("newLine", true) .addAttribute("format", "RFC5424") .addAttribute("ignoreExceptions", false); syslogAppender.add(builder.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.DENY) .addAttribute("level", Level.DEBUG)); builder.add(syslogAppender); builder.add(builder.newLogger("client2", Level.DEBUG) .add(builder.newAppenderRef("syslog1")) .addAttribute("additivity", false)); LoggerContext logContext = LoggerContext.getContext(false); org.apache.logging.log4j.core.config.Configuration configurationcore = logContext.getConfiguration(); List<AbstractConfiguration> configurationList = new ArrayList<>(); if (configurationcore != null) configurationList.add((AbstractConfiguration) configurationcore); org.apache.logging.log4j.core.config.Configuration newconfig = builder.build(); configurationList.add((AbstractConfiguration) newconfig); CompositeConfiguration compositeConfiguration = new CompositeConfiguration(configurationList); logContext.reconfigure(compositeConfiguration); logContext.updateLoggers(); Logger logger1 = LogManager.getLogger("client2"); logger1.info("client2 message1"); logger1.info("client2 message2"); logger.info("client1 message2"); logger1.info("client2 message3"); logger.info("client1 message3"); Thank you, Ganesh S