I use Tomcat 10.0.6, log4j 2.14.1. When I shutdown Tomcat I see this logs:
13-Nov-2021 22:32:32.915 SEVERE [main] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [airline] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@59402b8f]) and a value of type [org.apache.logging.log4j.core.impl.MutableLogEvent] (value [org.apache.logging.log4j.core.impl.MutableLogEvent@7188af83]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
13-Nov-2021 22:32:32.915 SEVERE [main] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [airline] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@6be968ce]) and a value of type [org.apache.logging.log4j.core.pattern.DatePatternConverter.PatternFormatter] (value [org.apache.logging.log4j.core.pattern.DatePatternConverter$PatternFormatter@7c37508a]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
13-Nov-2021 22:32:32.917 SEVERE [main] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [airline] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@247310d0]) and a value of type [org.apache.logging.log4j.message.ReusableSimpleMessage] (value [org.apache.logging.log4j.message.ReusableSimpleMessage@1033576a]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
13-Nov-2021 22:32:32.917 SEVERE [main] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [airline] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@303cf2ba]) and a value of type [org.apache.logging.log4j.core.pattern.DatePatternConverter.PatternFormatter] (value [org.apache.logging.log4j.core.pattern.DatePatternConverter$PatternFormatter@76494737]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
13-Nov-2021 22:32:32.921 SEVERE [main] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [airline] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@59402b8f]) and a value of type [org.apache.logging.log4j.core.impl.MutableLogEvent] (value [org.apache.logging.log4j.core.impl.MutableLogEvent@17fc391b]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
13-Nov-2021 22:32:32.921 SEVERE [main] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [airline] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@6be968ce]) and a value of type [org.apache.logging.log4j.core.pattern.DatePatternConverter.PatternFormatter] (value [org.apache.logging.log4j.core.pattern.DatePatternConverter$PatternFormatter@2b30a42c]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
13-Nov-2021 22:32:32.926 SEVERE [main] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [airline] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@247310d0]) and a value of type [org.apache.logging.log4j.message.ReusableSimpleMessage] (value [org.apache.logging.log4j.message.ReusableSimpleMessage@609e8838]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
log4j2.xml
<Configuration>
<Properties>
<Property name="property_console">%d{HH:mm:ss} %-5level %logger{1} - %msg%n</Property>
<Property name="property_file">
%d{yyyy-MM-dd HH:mm:ss} %-5level [%t] %logger{6} - %msg%n
</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${property_console}"/>
</Console>
<RollingFile name="FileRolling" fileName="logs/log.txt" append="true" filePattern="logs/${date:yyyy-MM-dd}/%d{yyyy-MM-dd_HH-mm}.txt">
<PatternLayout pattern="${property_file}"/>
<Policies>
<SizeBasedTriggeringPolicy size="100 K"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="ALL">
<AppenderRef ref="FileRolling"/>
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
My log4j2
in pom.xml
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.14.1</version>
</dependency>
I think it maybe connect with that i use jakarta.servlet
3.0 dependency but i don't know.
Moving .jar to tomcat/lib does not get any changes. What can be wrong?
CodePudding user response:
Your hypothesis is correct: log4j-web
requires support for ServletContainerInitializer
s, which were introduced in Servlet 3.0.
Since Servlet 5.0 (which Tomcat 10 implements), the full name of the class changed from javax.servlet.ServletContainerInitializer
to jakarta.servlet.ServletContainerInitializer
due to a copyright dispute between Oracle and the Eclipse Foundation. Therefore all versions of log4j-web
do not work on Tomcat 10.
You can however use the Tomcat migration tool for Jakarta EE to convert all your Log4j dependency jars.