Can anyone please help me on this issue?

On Fri, Oct 20, 2023, 12:23 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
>>>>
>>>>

Reply via email to