You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Richard Eckart de Castilho (Jira)" <ji...@apache.org> on 2021/10/18 15:41:00 UTC

[jira] [Updated] (LOG4J2-3177) Log4jLogger swallows stack trace if throwable is only present in parameter list and not given explicitly

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

Richard Eckart de Castilho updated LOG4J2-3177:
-----------------------------------------------
    Description: 
I have the feeling that this code below from the Log4jLogger class has a bug. I believe the intention of the code is to use the throwable extracted from the message params of the parametrized message if the {{throwable}} parameter was not explicitly provided to the method. But to accomplish this, the condition would need to be {{if (throwable == null)}} in the code snippet below. This seems to cause exception stack traces to be swallowed if the throwable is only provided in the params array but not explicitly in the {{throwable}} argument.

{code}
public void log(final Marker marker, final String fqcn, final int level, final String message, final Object[] params, Throwable throwable) {
  ...
  msg = new ParameterizedMessage(message, params, throwable);
  if (throwable != null) { // I am pretty sure the idea was to use a "==" here and not a "!="
    throwable = msg.getThrowable();
  }
  ...
}
{code}
Source (permalink master at reporting time): https://github.com/apache/logging-log4j2/blob/1a62186816bdd05ba420e01f6ee5a2b139a41816/log4j-slf4j-impl/src/main/java/org/apache/logging/slf4j/Log4jLogger.java#L371-L374
Source (latest master): https://github.com/apache/logging-log4j2/blob/master/log4j-slf4j-impl/src/main/java/org/apache/logging/slf4j/Log4jLogger.java#L371-L374

I hit the issue in Log4J 2.10.0 but checking the GitHub repo, it appears that this code is still present on the current master branch (see permalink above).

  was:
I have the feeling that this code below from the Log4jLogger class has a bug. I believe the intention of the code is to use the throwable extracted from the message params of the parametrized message if the {{throwable}} parameter was not explicitly provided to the method. But to accomplish this, the condition would need to be {{if (throwable == null)}} in the code snippet below. This seems to cause exception stack traces to be swallowed if the throwable is only provided in the params array but not explicitly in the {{throwable}} argument.

{code}
    public void log(final Marker marker, final String fqcn, final int level, final String message, final Object[] params, Throwable throwable) {
  ...
  msg = new ParameterizedMessage(message, params, throwable);
  if (throwable != null) {
    throwable = msg.getThrowable();
  }
  ...
}
{code}
Source (permalink master at reporting time): https://github.com/apache/logging-log4j2/blob/1a62186816bdd05ba420e01f6ee5a2b139a41816/log4j-slf4j-impl/src/main/java/org/apache/logging/slf4j/Log4jLogger.java#L371-L374
Source (latest master): https://github.com/apache/logging-log4j2/blob/master/log4j-slf4j-impl/src/main/java/org/apache/logging/slf4j/Log4jLogger.java#L371-L374

I hit the issue in Log4J 2.10.0 but checking the GitHub repo, it appears that this code is still present on the current master branch (see permalink above).


> Log4jLogger swallows stack trace if throwable is only present in parameter list and not given explicitly
> --------------------------------------------------------------------------------------------------------
>
>                 Key: LOG4J2-3177
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-3177
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: SLF4J Bridge
>    Affects Versions: 2.14.1
>            Reporter: Richard Eckart de Castilho
>            Priority: Major
>
> I have the feeling that this code below from the Log4jLogger class has a bug. I believe the intention of the code is to use the throwable extracted from the message params of the parametrized message if the {{throwable}} parameter was not explicitly provided to the method. But to accomplish this, the condition would need to be {{if (throwable == null)}} in the code snippet below. This seems to cause exception stack traces to be swallowed if the throwable is only provided in the params array but not explicitly in the {{throwable}} argument.
> {code}
> public void log(final Marker marker, final String fqcn, final int level, final String message, final Object[] params, Throwable throwable) {
>   ...
>   msg = new ParameterizedMessage(message, params, throwable);
>   if (throwable != null) { // I am pretty sure the idea was to use a "==" here and not a "!="
>     throwable = msg.getThrowable();
>   }
>   ...
> }
> {code}
> Source (permalink master at reporting time): https://github.com/apache/logging-log4j2/blob/1a62186816bdd05ba420e01f6ee5a2b139a41816/log4j-slf4j-impl/src/main/java/org/apache/logging/slf4j/Log4jLogger.java#L371-L374
> Source (latest master): https://github.com/apache/logging-log4j2/blob/master/log4j-slf4j-impl/src/main/java/org/apache/logging/slf4j/Log4jLogger.java#L371-L374
> I hit the issue in Log4J 2.10.0 but checking the GitHub repo, it appears that this code is still present on the current master branch (see permalink above).



--
This message was sent by Atlassian Jira
(v8.3.4#803005)