Why do you need to do it through code? I would recommend getting it working 
using a configuration (XML or JSON) and then, if you still need to, use that as 
your guide for how to create the RoutingAppender.

Ralph

> On Oct 19, 2023, at 11:53 AM, Ganesh S <ganesh123.g...@gmail.com> wrote:
> 
> I have made some modification in the previous code that I had sent and
> there is no error or warning while configuration initialization, but logs
> are not going to the destination server
> But if I try the same thing using log4j2.xml it is working fine.
> 
> Below is my updated code:
> 
> LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
>    Configuration config = ctx.getConfiguration();
> 
>    SyslogAppender syslogAppender =
> SyslogAppender.newSyslogAppenderBuilder()
>    .setName("syslog")
>    .setProtocol(Protocol.UDP)
>        .setHost(hostname)
>        .setPort(port)
>        .setAppName("service_name")
>        .setId("service_name")
>        .setFacility(Facility.LOCAL0)
>        .setNewLine(true)
>        .setFormat("RFC5424")
>        .setIgnoreExceptions(false)
>        .build();
> 
>    syslogAppender.start();
>    config.addAppender(syslogAppender);
> 
>    RoutingAppender.Builder routingBuilder = RoutingAppender.newBuilder();
>    routingBuilder.setConfiguration(config);
>         routingBuilder.setName("RoutingConfig");
> 
>         Node node = null;
>         Route[] routeList = new Route[1];
>         routeList[0] = Route.createRoute("syslog", "domain#client", node);
> 
>         routingBuilder.withRoutes(
>                 Routes.newBuilder().withPattern("$${ctx:module}")
>                 .withRoutes(routeList)
>                 .build());
> 
>         RoutingAppender routingAppender = routingBuilder.build();
>         routingAppender.start();
>         config.addAppender(routingAppender);
> 
>         AppenderRef ref = AppenderRef.createAppenderRef("RoutingConfig",
> Level.DEBUG, null);
>         AppenderRef[] refs = new AppenderRef[] { ref };
> 
>         LoggerConfig loggerConfig = LoggerConfig.newBuilder()
>              .withAdditivity(false)
>            .withLevel(Level.DEBUG)
>            .withLoggerName("RoutingLogger")
>            .withIncludeLocation("true")
>            .withRefs(refs)
>            .withConfig(config)
>            .build();
>         LoggerConfig rootLoggerConfig = LoggerConfig.newBuilder()
>            .withLevel(Level.DEBUG)
>            .withLoggerName(LogManager.ROOT_LOGGER_NAME)
>            .withIncludeLocation("true")
>            .withRefs(refs)
>            .withConfig(config)
>            .build();
> 
>         loggerConfig.addAppender(routingAppender, Level.DEBUG, null);
>         rootLoggerConfig.addAppender(routingAppender, Level.DEBUG, null);
>         config.addLogger("RoutingLogger", loggerConfig);
>         config.addLogger(LogManager.ROOT_LOGGER_NAME, loggerConfig);
>         ctx.updateLoggers();
> 
>         Logger logger = LogManager.getLogger("RoutingLogger");
> 
>         ThreadContext.put("module", "domain#client");
>         logger.info("message from domain client");
>         logger.error("message form domain client error");
>         ThreadContext.remove("module");
> 
> Please can any one tell me what am I missing in the above programmatic
> approach
> 
> On Thu, Oct 19, 2023 at 6:59 PM Ganesh S <ganesh123.g...@gmail.com> wrote:
> 
>> Trying to configure routing appender programmatically
>> Unable to figure out completely.
>> The current code for this is as below, which is not currently working.
>> Need help to complete this code.
>> 
>> ConfigurationBuilder<BuiltConfiguration> builder =
>> ConfigurationBuilderFactory.newConfigurationBuilder();
>> AppenderComponentBuilder syslogAppender = builder.newAppender("syslog",
>> "Syslog")
>>        .addAttribute("protocol", "UDP")
>>        .addAttribute("host", hostname)
>>        .addAttribute("port", port)
>>        .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);
>> 
>> Configuration config = builder.build();
>>    RoutingAppender.Builder routingBuilder = RoutingAppender.newBuilder();
>>    routingBuilder.setConfiguration(config);
>>         routingBuilder.setName("RoutingConfig");
>> 
>>         Node node = null;
>>         Route[] routeList = new Route[1];
>>         routeList[0] = Route.createRoute("syslog", "client1", node);
>> 
>>         routingBuilder.withRoutes(
>>                 Routes.newBuilder().withPattern("$${ctx:module}")
>>                 .withRoutes(routeList)
>>                 .build());
>> 
>>         RoutingAppender routingAppender = routingBuilder.build();
>>         routingAppender.start();
>>         config.addAppender(routingAppender);
>>         builder.add(builder.newLogger("RoutingLogger", Level.DEBUG)
>>               .add(builder.newAppenderRef("RoutingConfig"))
>>               .addAttribute("additivity", false));
>>         config = builder.build();
>>         config.addLogger("RoutingLogger",
>> config.getLoggerConfig("RoutingLogger"));
>>         Configurator.reconfigure(config);
>>         LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
>>         ctx.updateLoggers();
>> 
>>         Logger logger = LogManager.getLogger("RoutingLogger");
>> 
>>         ThreadContext.put("module", "client1");
>>         logger.info("message from client");
>>         logger.error("message form client error");
>>         ThreadContext.remove("module");
>> 
>> On Thu, Oct 19, 2023 at 2:27 PM Ganesh S <ganesh123.g...@gmail.com> wrote:
>> 
>>> Is there any reference for creating routing appender programmatically ?
>>> 
>>> On Thu, Oct 19, 2023, 9:35 AM Ralph Goers <ralph.go...@dslextreme.com>
>>> wrote:
>>> 
>>>> Why are you doing it this way? Can you not just use the RoutingAppender?
>>>> https://logging.apache.org/log4j/2.x/manual/appenders.html#RoutingAppender
>>>> 
>>>> Ralph
>>>> 
>>>>> On Oct 18, 2023, at 8:50 PM, Ganesh S <ganesh123.g...@gmail.com>
>>>> wrote:
>>>>> 
>>>>> 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
>>>> 
>>>> 


---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-user-h...@logging.apache.org

Reply via email to