Pitfall - Tomcat & Log4J2

Bei einem Kunden existiert eine Webanwendung, die auf Tomcat 10.0.27 läuft und im wesentlichen Servlets enthält, die verschiedene Services anbieten. Genannte Webanwendung läuft jedoch nicht zu 100% stabil und gelegentlich kommt es vor, dass der Tomcat in der Prozessüberwachung zwar als active angezeigt wird, jedoch auf Requests nicht mehr reagiert.
Im Log catalina.out tauchen mehrmals Meldungen auf wie

The web application xyz appears to have started a thread named [Log4j2-TF-5-Scheduled-1] but has failed to stop it.

Zum Logging wird hier das gute, alte (aber aktuelle) Log4J2 benutzt und da es hier im Kontext mit Servlets verwendet wird, steht als dependency im pom.xml korrekterweise auch log4j-jakarta-web (ab Servlet 5.0) und nicht bloß log4j-api und log4j-core:

1
2
3
4
5
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jakarta-web</artifactId>
<version>2.19.0</version>
</dependency>

Wie erwähnt ist ein aktueller Tomcat 10.0.27 im Einsatz, der in der Vergangenheit jedoch bereits mehrmals aktualisiert wurde bzw. es wurde anscheinend jeweils eine neue Version installiert und dann die Konfig- und Properties Files von der vorherigen Installation ganz oder in Teilen übernommen. In der Log4J-Dokumentation steht u.a. folgender Hinweis:

Important Note! For performance reasons, containers often ignore certain JARs known not to contain TLDs or ServletContainerInitializers and do not scan them for web-fragments and initializers. Importantly, Tomcat 7 <7.0.43 ignores all JAR files named log4j*.jar, which prevents this feature from working. This has been fixed in Tomcat 7.0.43, Tomcat 8, and later. In Tomcat 7 <7.0.43 you will need to change catalina.properties and remove log4j*.jar from the jarsToSkip property. You may need to do something similar on other containers if they skip scanning Log4j JAR files.

Und tatsächlich: obwohl es sich um einen aktuellen Tomcat handelt, war in der catalina.properties bei der Property jarsToSkip tatsächlich der Wert log4j*.jar eingetragen. Nachdem dieser entfernt und Tomcat neu gestartet wurde, tauchte auch die oben genannte Meldung nicht mehr auf.
Fazit: wenn die Anwendung soweit okay aussieht und das Problem trotzdem auftritt, sollte man seine Prämissen (hier: “der Server ist korrekt konfiguriert, schließlich ist er seit Jahren im Einsatz”) überprüfen. Nur weil man eine aktuelle Software vor sich hat, heißt das nicht, dass auch die Konfiguration aktuell ist.