23.07.2014

Apache Tomcat - Umstellung 'Apache Commons Logging' auf 'log4j'

Viele Entwickler haben bereits mit dem Tomcat gearbeitet und der ein oder andere wird sich sicherlich auch schon einmal Gedanken um das Logging gemacht haben. In der Default-Konfiguration wird das Logging über Apache Commons Logging realisiert. Dieses Framework ist ein leichtgewichtiger Wrapper um viele andere Loggingframeworks.


Damit ist das Logging im Tomcat so konfiguriert, dass ohne Kenntnis über die darunterliegende Logging-Implementierung das Level des Loggings feingranular reguliert werden kann. Seit dem Tomcat 6 wird eine interne Implementierung des Frameworks verwendet, so dass die unterschiedlichen Webanwendungen durchaus ihre eigene Kopie der Apache Commons Logging Bibliotheken mitbringen können. Durch die unterschiedliche ClassLoader sind die Implementierungen voneinander getrennt und haben keinen Einfluss aufeinander.

In manchen Fällen sind die Einstellungen für das Logging aber nicht ausreichend und der Einsatz eines erweiterten, speziellen Frameworks gewünscht. Aus diesem Grund ist es möglich, dass der Tomcat für den Einsatz von log4j konfiguriert wird. Dafür sind nur wenige, einfache Schritte notwendig. Aber zuerst ein Blick auf den Output ohne log4j.



Zuerst wird eine Konfigurationsdatei für das Logging erstellt. Diese wird als log4j.properties direkt im lib Verzeichnis unter $CATALINA_HOME abgelegt. Eine beispielhafte Konfiguration könnte wie folgt ausschauen:


Als Template eignet sich auch sehr gut die Vorlage in der offiziellen Dokumentation zur Einrichtung des Loggings.

Im Anschluss werden die zusätzliche notwendigen Bibliotheken, tomcat-juli* und log4j heruntergeladen und für eine globale Konfiguration im lib Verzeichnis unter $CATALINA_HOME platziert. Dabei ist darauf zu achten, dass eventuell vorhandene Dateien ersetzt werden. tomcat-juli* kann dabei über die Extra-Downloads für den Tomcat heruntergeladen werden, log4j kann direkt über die Projektseite bezogen werden.





Zur Sicherheit sollte im Anschluss noch die logging.properties unter $CATALINA_BASE/conf/ gelöscht werden. Im Anschluss kann der Tomcat wieder gestartet werden.


Merkwürdigerweise sieht die Ausgabe genauso aus, wie bereits vorher gesehen. Die Lösung erschließt sich nicht auf den ersten Blick, das Problem ist aber trotzdem leicht zu lösen. Ein Blick auf den Classpath offenbart den Fehler.


Augenscheinlich liegt im $CATALINA_BASE/bin/ noch eine weitere tomcat-juli.jar Bibliothek. Diese ist natürlich nicht auf den Einsatz bzgl. log4j vorbereitet und muss daher ebenfalls gepatcht werden. Hier bieten sich unter Unix zwei Möglichkeiten an, einmal das Kopieren der Datei aus dem $CATALINA_BASE/lib/ oder das Erstellen eines Symlinks. Der Einfachhalt halber wird die Datei an dieser Stelle kopiert und überschrieben. Der anschließende Start des Servers sollte dann das folgende Bild zeigen.


Die Ausgabe ist deutlich kürzer geworden und innerhalb des Log-Verzeichnisses finden wir die entsprechenden Logs.


Die werden nun durch log4j mit dem entsprechenden Pattern gefüllt.


Wichtig ist allerdings, dass bei einem solchen Ansatz die log4j Bibliotheken sofort allen Anwendungen zur Verfügung stehen. Das kann natürlich zu Problemen in den Anwendungen führen. Sollte Anwendungen mit Apache Commons Logging arbeiten, so wird automatisch als darunterliegende Implementierung log4j gewählt. Diese Einschränkungen sollten bei der Konfiguration dringend beachtet werden.

Keine Kommentare:

Kommentar veröffentlichen