vy commented on issue #3809:
URL: 
https://github.com/apache/logging-log4j2/issues/3809#issuecomment-3052824395

   > > could you use composition instead?
   > 
   > I am not sure we can use composition considering we're overriding 
`ThrowablePatternConverter#format`. Perhaps you can have a look to our [pattern 
converters](https://github.com/spring-projects/spring-boot/tree/main/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2)?
   
   @snicoll, see the following:
   
   ```diff
   Index: 
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverterTests.java
   ===================================================================
   diff --git 
a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverterTests.java
 
b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverterTests.java
   --- 
a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverterTests.java
    (revision 04d071046d5bdd52c40d5f91c83fa6395762f8af)
   +++ 
b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverterTests.java
    (date 1752069087378)
   @@ -19,7 +19,7 @@
    import org.apache.logging.log4j.core.LogEvent;
    import org.apache.logging.log4j.core.config.DefaultConfiguration;
    import org.apache.logging.log4j.core.impl.Log4jLogEvent;
   -import org.apache.logging.log4j.core.pattern.ThrowablePatternConverter;
   +import org.apache.logging.log4j.core.pattern.LogEventPatternConverter;
    import org.junit.jupiter.api.Test;
    
    import static org.assertj.core.api.Assertions.assertThat;
   @@ -32,7 +32,7 @@
     */
    class ExtendedWhitespaceThrowablePatternConverterTests {
    
   -    private final ThrowablePatternConverter converter = 
ExtendedWhitespaceThrowablePatternConverter
   +    private final LogEventPatternConverter converter = 
ExtendedWhitespaceThrowablePatternConverter
                .newInstance(new DefaultConfiguration(), new String[] {});
    
        @Test
   Index: 
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverterTests.java
   ===================================================================
   diff --git 
a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverterTests.java
 
b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverterTests.java
   --- 
a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverterTests.java
    (revision 04d071046d5bdd52c40d5f91c83fa6395762f8af)
   +++ 
b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverterTests.java
    (date 1752069087386)
   @@ -19,7 +19,7 @@
    import org.apache.logging.log4j.core.LogEvent;
    import org.apache.logging.log4j.core.config.DefaultConfiguration;
    import org.apache.logging.log4j.core.impl.Log4jLogEvent;
   -import org.apache.logging.log4j.core.pattern.ThrowablePatternConverter;
   +import org.apache.logging.log4j.core.pattern.LogEventPatternConverter;
    import org.junit.jupiter.api.Test;
    
    import static org.assertj.core.api.Assertions.assertThat;
   @@ -31,7 +31,7 @@
     */
    class WhitespaceThrowablePatternConverterTests {
    
   -    private final ThrowablePatternConverter converter = 
WhitespaceThrowablePatternConverter
   +    private final LogEventPatternConverter converter = 
WhitespaceThrowablePatternConverter
                .newInstance(new DefaultConfiguration(), new String[] {});
    
        @Test
   Index: 
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java
   ===================================================================
   diff --git 
a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java
 
b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java
   --- 
a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java
 (revision 04d071046d5bdd52c40d5f91c83fa6395762f8af)
   +++ 
b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java
 (date 1752069900762)
   @@ -21,6 +21,7 @@
    import org.apache.logging.log4j.core.config.plugins.Plugin;
    import org.apache.logging.log4j.core.pattern.ConverterKeys;
    import 
org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter;
   +import org.apache.logging.log4j.core.pattern.LogEventPatternConverter;
    import org.apache.logging.log4j.core.pattern.PatternConverter;
    import org.apache.logging.log4j.core.pattern.ThrowablePatternConverter;
    
   @@ -34,21 +35,24 @@
     */
    @Plugin(name = "ExtendedWhitespaceThrowablePatternConverter", category = 
PatternConverter.CATEGORY)
    @ConverterKeys({ "xwEx", "xwThrowable", "xwException" })
   -public final class ExtendedWhitespaceThrowablePatternConverter extends 
ThrowablePatternConverter {
   +public final class ExtendedWhitespaceThrowablePatternConverter extends 
LogEventPatternConverter {
    
   -    private final ExtendedThrowablePatternConverter delegate;
   +    private final LogEventPatternConverter delegate;
   +
   +    private final String separator;
    
        private ExtendedWhitespaceThrowablePatternConverter(Configuration 
configuration, String[] options) {
   -            super("WhitespaceExtendedThrowable", "throwable", options, 
configuration);
   +            super("WhitespaceExtendedThrowable", "throwable");
                this.delegate = 
ExtendedThrowablePatternConverter.newInstance(configuration, options);
   +            this.separator = 
WhitespaceThrowablePatternConverter.readSeparatorOption(options);
        }
    
        @Override
        public void format(LogEvent event, StringBuilder buffer) {
                if (event.getThrown() != null) {
   -                    buffer.append(this.options.getSeparator());
   +                    buffer.append(this.separator);
                        this.delegate.format(event, buffer);
   -                    buffer.append(this.options.getSeparator());
   +                    buffer.append(this.separator);
                }
        }
    
   Index: 
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java
   ===================================================================
   diff --git 
a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java
 
b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java
   --- 
a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java
 (revision 04d071046d5bdd52c40d5f91c83fa6395762f8af)
   +++ 
b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java
 (date 1752069900778)
   @@ -20,6 +20,8 @@
    import org.apache.logging.log4j.core.config.Configuration;
    import org.apache.logging.log4j.core.config.plugins.Plugin;
    import org.apache.logging.log4j.core.pattern.ConverterKeys;
   +import 
org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter;
   +import org.apache.logging.log4j.core.pattern.LogEventPatternConverter;
    import org.apache.logging.log4j.core.pattern.PatternConverter;
    import org.apache.logging.log4j.core.pattern.ThrowablePatternConverter;
    
   @@ -32,18 +34,24 @@
     */
    @Plugin(name = "WhitespaceThrowablePatternConverter", category = 
PatternConverter.CATEGORY)
    @ConverterKeys({ "wEx", "wThrowable", "wException" })
   -public final class WhitespaceThrowablePatternConverter extends 
ThrowablePatternConverter {
   +public final class WhitespaceThrowablePatternConverter extends 
LogEventPatternConverter {
   +
   +    private final LogEventPatternConverter delegate;
   +
   +    private final String separator;
    
        private WhitespaceThrowablePatternConverter(Configuration 
configuration, String[] options) {
   -            super("WhitespaceThrowable", "throwable", options, 
configuration);
   +            super("WhitespaceThrowable", "throwable");
   +            this.delegate = 
ExtendedThrowablePatternConverter.newInstance(configuration, options);
   +            this.separator = readSeparatorOption(options);
        }
    
        @Override
        public void format(LogEvent event, StringBuilder buffer) {
                if (event.getThrown() != null) {
   -                    buffer.append(this.options.getSeparator());
   -                    super.format(event, buffer);
   -                    buffer.append(this.options.getSeparator());
   +                    buffer.append(this.separator);
   +                    this.delegate.format(event, buffer);
   +                    buffer.append(this.separator);
                }
        }
    
   @@ -58,4 +66,15 @@
                return new WhitespaceThrowablePatternConverter(configuration, 
options);
        }
    
   +    static String readSeparatorOption(String[] options) {
   +            if (options != null) {
   +                    for (String option : options) {
   +                            if (option != null && 
option.startsWith("separator(") && option.endsWith(")")) {
   +                                    return 
option.substring("separator(".length(), option.length() - 1);
   +                            }
   +                    }
   +            }
   +            return System.lineSeparator();
   +    }
   +
    }
   
   ```
   
   @ppkarwasz, would you mind proof-reading the above patch, please?


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@logging.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to