[ 
https://issues.apache.org/jira/browse/LOG4J2-3479?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17523600#comment-17523600
 ] 

Ralph Goers commented on LOG4J2-3479:
-------------------------------------

The original message being logged encountered an error and threw an exception. 
From this it is impossible to say what that was. AbstractLogger is handling 
that error and logging information about the error via StatusLogger.  The 
logging call is


{code:java}
StatusLogger.getLogger().warn("{} caught {} logging {}: {}",
        fqcn,
        throwable.getClass().getName(),
        message.getClass().getSimpleName(),
        message.getFormat(),
        throwable); {code}
We can't really tell what is causing the error from the information provided.   
The logging call above should be in a try/catch block and try to prevent any 
exceptions by checking the parameters before making the logging call.

It would really help if you had a test that could reproduce this.

> While calling logger.error(ex.getMessage(),ex) causing stackoverflow and 
> java.lang.OutOfMemoryError: Java heap space with repetitive call of following 
> stacktrace. 
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: LOG4J2-3479
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-3479
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Log4j-to-SLF4J
>    Affects Versions: 2.17.0
>         Environment: OpenJDK 64-Bit 1.8.0_241
> Apache Tomcat 8.5.51
> Operating System: Linux Cent OS 2.6.32-754.33.1.el6.centos.plus.x86_64, 
> 2.6.32-754.33.1.el6.x86_64
>            Reporter: Rupesh
>            Priority: Critical
>         Attachments: image-2022-04-18-10-38-39-889.png
>
>
> While calling logger.error(ex.getMessage(),ex) causing *stackoverflow and 
> java.lang.OutOfMemoryError: Java heap space* with repeatative call of 
> following stacktrace. it is happening randomly on our application. *Log4j2 
> version is 2.17.0*
> {code:java}
>  at 
> org.apache.logging.log4j.spi.AbstractLogger.handleLogMessageException(Ljava/lang/Throwable;Ljava/lang/String;Lorg/apache/logging/log4j/message/Message;)V
>  (AbstractLogger.java:2225)
>   at 
> org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(Ljava/lang/String;Ljava/lang/StackTraceElement;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Lorg/apache/logging/log4j/message/Message;Ljava/lang/Throwable;)V
>  (AbstractLogger.java:2208)
>   at 
> org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Lorg/apache/logging/log4j/message/Message;Ljava/lang/Throwable;)V
>  (AbstractLogger.java:2159)
>   at 
> org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Lorg/apache/logging/log4j/message/Message;Ljava/lang/Throwable;)V
>  (AbstractLogger.java:2142)
>   at 
> org.apache.logging.log4j.spi.AbstractLogger.logMessage(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
>  (AbstractLogger.java:2058)
>   at 
> org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
>  (AbstractLogger.java:1931)
>   at 
> org.apache.logging.log4j.spi.AbstractLogger.warn(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
>  (AbstractLogger.java:2805)
>   at 
> org.apache.logging.log4j.spi.AbstractLogger.handleLogMessageException(Ljava/lang/Throwable;Ljava/lang/String;Lorg/apache/logging/log4j/message/Message;)V
>  (AbstractLogger.java:2225)
>   at 
> org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(Ljava/lang/String;Ljava/lang/StackTraceElement;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Lorg/apache/logging/log4j/message/Message;Ljava/lang/Throwable;)V
>  (AbstractLogger.java:2208)
>   at 
> org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Lorg/apache/logging/log4j/message/Message;Ljava/lang/Throwable;)V
>  (AbstractLogger.java:2159)
>   at 
> org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Lorg/apache/logging/log4j/message/Message;Ljava/lang/Throwable;)V
>  (AbstractLogger.java:2142)
>   at 
> org.apache.logging.log4j.spi.AbstractLogger.logMessage(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Ljava/lang/String;Ljava/lang/Throwable;)V
>  (AbstractLogger.java:2017)
>   at 
> org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Ljava/lang/String;Ljava/lang/Throwable;)V
>  (AbstractLogger.java:1983) {code}
> Lo4j2.xml configuration file
> {code:java}
> <?xml version="1.0" encoding="UTF-8"?>
> <Configuration xmlns="http://logging.apache.org/log4j/2.0/config";
>                packages="custom.appender">
>     <Appenders>
>         <Routing name="CustomRouting">
>             <Routes pattern="${sys:pathToLogfile}">
>                 <Route>
>                     <CustomRollingRandomAccessFile name="FILE"
>                         fileName="${sys:pathToLogfile}/${date:yyyy-MM-dd}.log"
>                         
> filePattern="${sys:pathToLogfile}/%d{yyyy-MM-dd}.log.gz"
>                         immediateFlush="true" append="true">
>                         <PatternLayout pattern="%-5p | %d{yyyy-MM-dd HH:mm:ss 
> zzz} | [%t] %C{2} (%F:%L) - %m | %X%n" />
>                         <Policies>
>                             <TimeBasedTriggeringPolicy interval="1" 
> modulate="true" />
>                         </Policies>
>                         <DefaultRolloverStrategy>
>                             <Delete basePath="${sys:pathToLogfile}">
>                                 <IfFileName glob="//*.log.gz" />
>                                 <IfLastModified age="60d" />
>                             </Delete>
>                         </DefaultRolloverStrategy>
>                     </CustomRollingRandomAccessFile>
>                 </Route>
>             </Routes>
>         </Routing>      
>         <Console name="STDOUT" target="SYSTEM_OUT">
>             <PatternLayout pattern="%-5p | %d{yyyy-MM-dd HH:mm:ss zzz} [%t] 
> %C{2} (%F:%L) - %m | %X%n" />
>         </Console>
>     </Appenders>
>     <Loggers>
>         <Root level="ERROR" includeLocation="true" >            
>             <AppenderRef ref="CustomRouting">
>                 <ThreadContextMapFilter onMatch="DENY" onMismatch="ACCEPT">
>                     <KeyValuePair key="Dir" value="customval" />
>                 </ThreadContextMapFilter>
>             </AppenderRef>
>         </Root>
>     </Loggers>
> </Configuration> {code}
> Here is heap dump snapshot for the same which shows StatusMessage object's 
> retained heap size.
> !image-2022-04-18-10-38-39-889.png!



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to