You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Awais Chishti (Jira)" <ji...@apache.org> on 2022/08/26 23:16:00 UTC

[jira] [Updated] (LOG4J2-3582) Unexpected appender attribute after programmatically configuring two separate Configuration objects

     [ https://issues.apache.org/jira/browse/LOG4J2-3582?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Awais Chishti updated LOG4J2-3582:
----------------------------------
    Summary: Unexpected appender attribute after programmatically configuring two separate Configuration objects  (was: Unexpected appender attribute after programmatically configuring two separate `Configuration` objects)

> Unexpected appender attribute after programmatically configuring two separate Configuration objects
> ---------------------------------------------------------------------------------------------------
>
>                 Key: LOG4J2-3582
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-3582
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Configurators
>            Reporter: Awais Chishti
>            Priority: Blocker
>
> Expected output from the code below:
> {quote}{{Got buffer size from second configuration: 7777, expected: 7777}}
> {quote}
> Actual output from the code below:
> {quote}{{Got buffer size from second configuration: 1234, expected: 7777}}
> {quote}
> Code:
> {code:java}
> package com.chishtia.mre;
> import org.apache.logging.log4j.Level;
> import org.apache.logging.log4j.core.Appender;
> import org.apache.logging.log4j.core.appender.RollingFileAppender;
> import org.apache.logging.log4j.core.appender.rolling.RollingFileManager;
> import org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy;
> import org.apache.logging.log4j.core.config.Configuration;
> import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
> import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory;
> import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder;
> import org.apache.logging.log4j.core.config.builder.api.RootLoggerComponentBuilder;
> import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
> /**
>  * Class to test log4j2 configuration state persistence
>  */
> public class Log4j2PersistentConfigurationMRE {
>     private static final String APPENDER_NAME = "someAppenderName";
>     private static Configuration getConfigurationWithBufferSize(final int bufferSize) {
>         // Initialize config
>         final ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
>         builder.setConfigurationName("TestConfig");
>         // Add appenders
>         final AppenderComponentBuilder appenderBuilder = builder.newAppender(APPENDER_NAME, "RollingFile");
>         appenderBuilder.addComponent(builder.newComponent("TimeBasedTriggeringPolicy"));
>         appenderBuilder.addAttribute("filePattern", "example.log.%d{yyyy-MM-dd}");
>         appenderBuilder.addAttribute("bufferedIO", true);
>         appenderBuilder.addAttribute("bufferSize", bufferSize);
>         builder.add(appenderBuilder);
>         // Add root logger
>         final RootLoggerComponentBuilder rootLoggerBuilder = builder.newRootLogger(Level.INFO);
>         rootLoggerBuilder.add(builder.newAppenderRef(APPENDER_NAME));
>         builder.add(rootLoggerBuilder);
>         // Build
>         return builder.build();
>     }
>     private static void log4j2MREDemo() {
>         final Configuration firstConfiguration = getConfigurationWithBufferSize(1234);
>         final Configuration secondConfiguration = getConfigurationWithBufferSize(7777);
>         final Appender appender = secondConfiguration.getAppenders().get(APPENDER_NAME);
>         final RollingFileAppender rollingFileAppender = (RollingFileAppender) appender;
>         final RollingFileManager rollingFileManager = rollingFileAppender.getManager();
>         System.out.println("Got buffer size from second configuration: " +
>                            rollingFileManager.getBufferSize() +
>                            ", expected: 7777");
>     }
>     public static void main(final String[] args) {
>         log4j2MREDemo();
>     }
> }
> {code}
> TL;DR: It seems that the BufferSize appender attribute is not correctly set by ConfigurationBuilder::build() after its first invocation, and that the attribute set in the first invocation persists.
> Q: Is this expected behavior? If yes then what workaround will let me rebuild configurations without the previous state persisting?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)