Campusmanagement

Campusmanagement an der FAU

Inhalt

Log4j Runtime Reloading

Einleitung
In diesem Blogeintrag werde ich zeigen, wie man die in einer J2EE Umgebung die Log4j Konfiguration von Servlet Container und deplolyten Webapps zur Laufzeit — also ohne Neustart oder Redeploy — neu einlesen kann.

Log4j bietet zu diesem Zweck bereits zwei Methoden an, die jeweils in den Klassen PropertyConfigurator bzw. DOMConfigurator zu finden sind. Diese sind für unsere Zwecke allerdings nicht geeignet (von der Benutzung wird vielerorts abgeraten), da sie einen eigenen Thread starten, welcher die log4j.properties bzw. log4j.xml auf Änderungen hin überwacht.
Das starten von Threads ist in J2EE Umgebungen jedoch verboten, da diese in der Regel nicht ordnungsgemäß beendet werden und zu Speicherlöchern führen.

JBoss und Tomcat7 erkennen Änderungen an ihrer eigenen Log4j Konfiguration bereits von Haus aus. Die Live Konfiguration von Webapps wird aber nicht unterstützt.
Aus diesem Grund und für Tomcat Versionen kleiner 7.0 bleibt die diese Lösung deshalb totzdem sinnvoll.

Weiterlesen

Loghosts mit log4j

Einleitung
Um Logmeldungen auf einem zentralen Loghost zu bündeln werden von Log4j grundsätzlich zwei Lösungsvarianten bereitgestellt.

Ohne die Log4j Welt verlassen zu müssen lassen sich mittes eines Gespanns aus org.apache.log4j.net.SocketAppender auf der Client-Seite und org.apache.log4j.net.SimpleSocketServer auf der Server-Seite LogEvent Objekte übertragen und auf dem Loghost in Dateien schreiben.

Die zweite Möglichkeit nutzt den org.apache.log4j.net.SyslogAppender, um die Logmeldung an einen lokalen oder auch entfernten Syslog Dienst weiterzugeben. Alles weitere wird dann je nach Konfiguration des laufenden Syslog Dienstes erledigt.

Weiterlesen

Entwicklerspezifische Maven Properties

Problem
Oft gibt es bei Anwendungen bestimmte Properties welche von Entwickler zu Entwickler andere Werte aufweisen sollen, aber für das QA- oder Produktivsystem nur einen festen Wert haben.

Nehmen wir als Beispiel eine Anwendung die Status-Mails an eine bestimmte Adresse schicken soll. Gerade wenn mehrere Entwickler an einer Anwendung arbeiten sollten die Mails während der Entwicklung immer an den entsprechenden Entwickler gehen — und das am besten automatisiert ohne händisches eingreifen.

Weiterlesen

Konflikte: Log4j SMTPAppender und mail.jar im Tomcat

Wie sich herrausstellte bietet das Verwenden der Javax Mail Library im Tomcat einiges Konfliktpotential.
Nach der Umstellung des Tomcat auf Log4j sollte nun zusätzlich auch der SMTPAppender zum Versenden verschiedener Logmeldungen genutzt werden. Als Abhängigkeiten ergaben sich dadurch die beiden JARs mail.jar und activation.jar, welche im Tomcat common libs Verezichnis bereitgestellt werden müssen.

Soweit so gut.

Nach dem Kopieren der beiden JARs ins Tomcat lib Verzeichnis ergab sich Folgendes beim Versenden der ersten Logmeldung via SMTPAppender folgender Fehler:
Weiterlesen

Log4j SMTP Appender — aufgebohrt

Nach dem Umstellen des Tomcat auf farbcodiertes Logging ist zwar deutlich mehr Übersicht erreicht worden, aber die meiste Zeit sitzt man ja eher nicht vor dem PC und verfolgt alle Logausgaben um etwaige Fehler- oder Statusmeldungen mitzubekommen.

Daher wurde als weitere Verbesserung der Log4j SMTP Appender herangezogen.
Dieser ermöglicht es einen zusätzlichen Appender zu konfigurieren, um bestimmte Logmeldungen zusätzlich auch per Mail zu versenden.

Weiterlesen

Farbcodiertes Logging für Tomcat

Aufbauend auf Krassis Artikel zum farbcodierten Logging für JBoss und JBoss ESB habe ich das bunte Loggen auch mal für den Tomcat umgesetzt.
Benutzt wurde Tomcat 6.0.20, es sollte aber auch mit jeder anderen Version so oder so ähnlich funktionieren.

Die Einrichtung gliedert sich in zwei Schritte:
I. Tomcats internen Loggingmechanismus auf log4j umstellen
II. Log4j für Tomcat mit dem farbgebenden Logger konfigurieren
Weiterlesen