YanivKunda opened a new issue, #3473:
URL: https://github.com/apache/logging-log4j2/issues/3473

   ## Description
   
   When using `DefaultLogBuilder` log* methods, `throwable` information that 
might have been inferred by the created `Message` object is lost - and 
`DefaultLogBuilder` only passes the explicit `throwable` that was set via 
`LogBuilder.withThrowable(Throwable)`.
   This is in contradiction to the regular use of `Logger` methods that accept 
message+args - which creates a `Message` using the configured factory, and then 
uses `Message.getThrowable()` to extract the throwable.
   
   This was initially assumed as a bug in `log4j-transform-maven-plugin` (which 
converts regular `Logger` calls to `LogBuilder`):
   https://github.com/apache/logging-log4j-transform/issues/169
   but I realized that it might be a stretch for the plugin to infer this data 
at build-time to be able to pass it to `.withThrowable`.
   
   ## Suggested Fix
   
   Change `DefaultLogBuilder`'s `logMessage(Message)` code from
   `
   
   ## Configuration
   
   **Version:** 2.24.3
   
   **Operating system:** macOS Sonoma 14.7.2
   **JDK:** eclipse-temurin 17.0.13
   
   ## Logs
   
   Consider the following code:
   ```
           Throwable throwable = new Exception("Oh oh");
           String messageFormat = "Hello, {}!";
           String arg = "Problem";
           logger.error(messageFormat, arg, throwable);
           logger.atError().log(messageFormat, arg, throwable);
   ```
   
   results in the following output:
   ```
   14:30:53.223 [main] ERROR net.kundas.Main - Hello, Problem!
   java.lang.Exception: Oh oh
        at net.kundas.Main.main(Main.java:11) [classes/:?]
   14:30:53.233 [main] ERROR net.kundas.Main - Hello, Problem!
   ```
   
   ## Reproduction
   
   I've tried recreating it in a unit test, but they seem to be using 
`org.apache.logging.log4j.test.TestLogger`, which does this inference in its 
`log` method:
   ```
           final Throwable t;
           if (throwable == null
                   && params != null
                   && params.length > 0
                   && params[params.length - 1] instanceof Throwable) {
               t = (Throwable) params[params.length - 1];
           } else {
               t = throwable;
           }
           if (t != null) {
               sb.append(' ');
               final ByteArrayOutputStream baos = new ByteArrayOutputStream();
               t.printStackTrace(new PrintStream(baos));
               sb.append(baos);
           }
   ```


-- 
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.apache.org

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

Reply via email to