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.


Einfach

Eine einfache Konfiguration könnte etwa so aussehen:

### SMTP appender
# This will collect all messages with log level >= Threshold in a buffer and send the
# buffer contents to the configured e-mail address(es) when a trigger event occurs.
#
# The default trigger event is the logging of an error.
#
log4j.appender.SMTP=org.apache.log4j.net.SMTPAppender
log4j.appender.SMTP.To=
log4j.appender.SMTP.From=
log4j.appender.SMTP.SMTPHost=
log4j.appender.SMTP.Subject=Log4j message
log4j.appender.SMTP.BufferSize=32
log4j.appender.SMTP.Threshold=ERROR

Im obigen Beispiel werden nur Meldungen mit LogLevel ERROR vom SMTPAppender verarbeitet.
Würde man die Threshold Property auf ein niedrigeres LogLevel – wie z.B. INFO – setzen, würden auch INFO Messages in den Puffer geschrieben.
Allerdings sendet der SMTPAppender immer nur dann eine Mail, wenn eine ERROR Message geloggt wird oder der Puffer voll ist. Dies sind sogenannte TriggerEvents, die das Senden der Mail auslösen.

Besser

Dieses Verhalten ist in der Praxis nicht unbedingt sehr praktisch. Zum Einen ist das Senden einer Mail bei jedem ERROR manchmal schon etwas zuviel des Guten und zum Anderen möchte man oft auch ausgewählte INFO oder gar DEBUG Meldungen als Status-Mails bekommen, um ein System besser im Auge behalten zu können.

Deshalb wurde die Implementierung des SMTPAppenders etwas abgeändert und um einige nette Zusatzfunktionen erweitert:

  • FATAL und größer wird immer zum Puffer hinzugefügt und triggert Mailversand des Pufferinhalts
  • Meldungen mit Prefix „>>“ werden — unabhängig vom Loglevel — zum Puffer hinzugefügt
  • Meldungen mit Prefix „[[MAIL]]“ werden — unabhängig vom Loglevel — zum Puffer hinzugefügt und triggern Mailversand des Pufferinhalts

Zusätzlich wurde auch die Standard PatternLayout Klasse erweitert:

  • FATAL und größer wird mit dem konfigurierten (ausführlichen) Pattern Layout gerendert
  • Meldungen mit Prefix „>>“ werden mit dem Default Pattern Layout gerendert

Das Default Layout besteht lediglich aus der geloggten Nachricht selbst. Dieses Layout ist für das Versenden einfacher Statusmails wesentlicht einfacher und übersichtlicher als das sehr ausführliche Layout für wirkliche schwere Fehler.

Die Konfiguration des SMTPAppenders mit den neuen Funktionen sieht dann wie folgt aus:

### SMTP appender
#
log4j.appender.SMTP=de.rrze.ppsa.log.CitSmtpAppender
log4j.appender.SMTP.To=
log4j.appender.SMTP.From=
log4j.appender.SMTP.SMTPHost=
log4j.appender.SMTP.Subject=Log4j message
log4j.appender.SMTP.layout=de.rrze.ppsa.log.CitSmtpPatternLayout
log4j.appender.SMTP.layout.ConversionPattern=%d{ISO8601} [%t] %5p %C:%L%n%n=> File: %F%n%n=> Message: %m%n%n=> Caller: %l%n%n
log4j.appender.SMTP.BufferSize=32
log4j.appender.SMTP.Threshold=INFO

Woher

Link im Reppo: http://reppo.rrze.uni-erlangen.de:8080/archiva/browse/de.rrze.ppsa.log/cit-log4j-smtp