B2B-Logging & Tomcat-Logging mit log4j

B2B-Logging

Das Logging der B2B basiert auf Log4j.

Globale Logging-Konfiguration

Die Konfiguration des B2B-Loggings kann über einige GlobalProperties vorgenommen werden.

GlobalProperty Beschreibung Werte
B3P_LOG4J_LEVEL Ermöglicht die Konfiguration des Loglevels. Ist kein Wert gesetzt, so wird als Default WARN verwendet. ALL, TRACE, DEBUG, INFO, WARN (default), ERROR, FATAL, OFF
B3P_LOG4J_BASE_DIR Pfad-Angabe, in welchem Verzeichnis die Logs geschrieben werden. In der Regel wird “tomcat_all/logs” verwendet.  
B3P_LOG4J_OFFSET Wird in Kombination mit dem Serverknoten als Name des Loggers verwendet. Daraus folgt auch der Name der Log-Datei. Bei einem Offset von 40000 wird beispielweise für Knoten 1 die Log-Datei B2BBP_40001.log erzeugt. 40000
B3P_LOG4J_ConsoleAppender Der ConsoleAppender hängt Log-Ausgaben an die Datenströme System.out (Standard) und System.err an und verwendet dabei das angegebene Layout. %d{ABSOLUTE} %-4r [%t] %-5p %c - %m%n
B3P_LOG4J_USE_ConsoleAppender Der ConsoleAppender muss aktiviert werden. true, false (Default: false)
B3P_LOG4J_RollingFileAppender Der RollingFileAppender schreibt Log-Ausgaben in rollierende Dateien. Die Konfiguration enthält 3 Werte, die durch Semikolon getrennt sind: Die maximale Dateigröße der Log-Dateien, die Anzahl der Log-Dateien und das Log-Layout. Suffixe für die Dateigröße sind KB, MB oder GB. 5000KB;5;%d %-5p %C{2} %x %m%n
B3P_LOG4J_SUPPRESS_URLS Unterdrückt URLs beim Logging in den B2B-Logs. Dadurch werden auch Benutzerdaten vom Loginversuch unterdrückt. true, false (Default: true)
B3P_LOG4J_REDIRECT_STDERR Leitet die Stderr-Ausgaben in eine separate B2B-Log-Datei um. true, false (Default: false)
B3P_LOG4J_REDIRECT_STDOUT Leitet die Stdout-Ausgaben in eine separate B2B-Log-Datei um. true, false (Default: false)

Log-Layout

Das Layout der Log-Ausgaben kann über Standard-Log4j-Patterns konfiguriert werden. Die Standard-mäßig verwendeten Spezifikationssymbole sind im folgenden beschrieben. Log4j bietet darüber hinaus noch weitere Spezifikationssymbole, die allerdings nicht alle hier beschrieben werden. Die Spezifikationssymbole können durch normale Text-Elemente, wie z.B. Klammern, “-“ etc. ergänzt werden.

Das Layout %d %-5p %C{2} %x %m%n erzeugt Log-Ausgaben der folgenden Form:

2017-10-27 13:58:38,425 DEBUG xyz.BeispielKlasse Dies ist der Beispieltext einer Log-Ausgabe.

Spezifikationssymbol Beschreibung
%c Wird verwendet, um den Kategorienamen auszugeben.
%C Wird verwendet, um den vollqualifizierten Klassennamen auszugeben. In geschweiften Klammern kann zusätzlich die Genauigkeit angegeben werden, dabei wird dann nur die entsprechende Anzahl der Klassennamen-Teile von rechts ausgegeben. Zum Beispiel bei einem Klassennamen “org.b2bbp.xyz.BeispielKlasse” erzeugt das Pattern %C{2} die Augabe “xyz.BeispielKlasse”.
%d Wird verwendet um den Zeitstempel des Log-Eintrags auszugeben. Es kann zusätzlich ein Datumsformat in geschweiften Klammern angegeben werden, z.B. %d{HH:mm:ss,SSS}. Wird kein spezielles Datumsformat angegeben, so wird das ISO8601-Format (yyyy-MM-dd HH:mm:ss,SSS) verwendet. Es wird empfohlen, die Log4j-Datumsformate zu verwenden. Dies sind die Werte ABSOLUTE (HH:mm:ss,SSS), DATE (dd MMM yyyy HH:mm:ss,SSS) und ISO8601 (yyyy-MM-dd HH:mm:ss,SSS).
%m Wird verwendet, um die eigentliche Meldung auszugeben
%n Wird verwendet, um einen Zeilenumbruch auszugeben. Der Line-Separator ist Plattformabhängig.
%-5p %p gibt das Log-Level an. Das “-“ gibt eine linksbündige Ausgabe an. Die 5 bedeutet, dass die Ausgabe auf 5 Zeichen verlängert wird. Dadurch stehen Ausgaben für z.B. “INFO” und “DEBUG” bündig untereinander.
%-4r %r wird verwendet, um die Anzahl der Millisekunden seit Start der Anwendung auszugeben. -4 erzeugt eine linksbündige Ausgabe, die auf 4 Zeichen verlängert wird.
%x Wird verwendet, um den NDC (Nested Diagnostic Context) auszugeben
%t Wird verwendet, um den Threadnamen auszugeben.

Klassen Loglevel

Das Loglevel kann für jede Klasse einzeln gesetzt werden. Hierfür ist folgende Extension anzulegen:

LOG_LEVELS (mit leerem Provider und leerer Version)

Für jede Klasse ist eine Zeile mit dem voll qualifizierten Klassennamen (einschließlich Package) anzugeben:

"vollst. Klassenname"="Loglevel"

Beispiel: org.b2bbp.engine.util.Log4jUtils=INFO

Als Loglevel können die gleichen Werte wie beim globalen Loglevel angegeben werden. Alle Klassen, für die kein eigenes Loglevel gesetzt ist, erhalten das globale Loglevel.

Tomcat-Logging

Dieser Teil der Dokumentation erklärt, wie Sie das Log-Verhalten eines Tomcat auf log4j umstellen. Damit lässt sich einstellen, analog wie beim B2B-Logging, dass die log-Dateien “rollen”, also bei einer gewissen Dateigröße eine neue Datei angelegt wird und nach einer gewissen Anzahl von Dateien die älteste gelöscht wird. Dies spart Speicherplatz und verhindert das unbegrenzte Wachsen der Logdateien. Grundlage für diese Dokumentation war:

http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j

Schritte zur Einrichtung

Die Verzeichnisse $CATALINA_BASE und $CATALINA_HOME finden sie in den Java-Einstellungen Ihres Tomcats. Standard ist in beiden Fällen das Verzeichnis des Tomcat selbst.

  • Erstelle eine Datei mit Namen log4j.properties mit dem Inhalt aus Kapitel 2 und speichere sie in $CATALINA_BASE/lib.
  • Download von tomcat-juli.jar und tomcat-juli-adapters.jar http://mirror.dkd.de/apache/tomcat/tomcat-7/v7.0.82/bin/extras/
  • Kopiere tomcat-juli-adapters.jar nach $CATALINA_HOME/lib.
  • Kopiere log4j-1.x.x.jar von $CATALINA_HOME/webapps/b2bbp-engine/WEB-INF/lib nach $CATALINA_HOME/lib.
  • Ersetze $CATALINA_HOME/bin/tomcat-juli.jar mit tomcat-juli.jar von oben.
  • Lösche $CATALINA_BASE/conf/logging.properties
  • Entferne Logging-Einstellungen am Tomcat:
  • Tomcat neustarten

logging.properties

Folgendes sollte als logging.properties benutzt werden.

log4j.rootLogger = INFO, CATALINA

log4j.appender.CATALINA = org.apache.log4j.RollingFileAppender
log4j.appender.CATALINA.File = ${catalina.base}/logs/catalina.log
log4j.appender.CATALINA.Append = true
log4j.appender.CATALINA.Encoding = UTF-8
log4j.appender.CATALINA.MaxFileSize = 1000KB
log4j.appender.CATALINA.MaxBackupIndex=5
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
 
log4j.appender.LOCALHOST = org.apache.log4j.RollingFileAppender
log4j.appender.LOCALHOST.File = ${catalina.base}/logs/localhost.log
log4j.appender.LOCALHOST.Append = true
log4j.appender.LOCALHOST.Encoding = UTF-8
log4j.appender.LOCALHOST.MaxFileSize = 1000KB
log4j.appender.LOCALHOST.MaxBackupIndex=5
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
 
log4j.appender.MANAGER = org.apache.log4j.RollingFileAppender
log4j.appender.MANAGER.File = ${catalina.base}/logs/manager.log
log4j.appender.MANAGER.Append = true
log4j.appender.MANAGER.Encoding = UTF-8
log4j.appender.MANAGER.MaxFileSize = 1000KB
log4j.appender.MANAGER.MaxBackupIndex=5
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
 
log4j.appender.HOST-MANAGER = org.apache.log4j.RollingFileAppender
log4j.appender.HOST-MANAGER.File = ${catalina.base}/logs/host-manager.log
log4j.appender.HOST-MANAGER.Append = true
log4j.appender.HOST-MANAGER.Encoding = UTF-8
log4j.appender.HOST-MANAGER.MaxFileSize = 1000KB
log4j.appender.HOST-MANAGER.MaxBackupIndex=5
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
 
log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding = UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
 
# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost] = INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager] = INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager] = INFO, HOST-MANAGER

Umleiten der Standardaussteuerung (STDOUT und STDERR) des Tomcats in rollierende Log4J-Logs über die B2B

Über die folgenden GlobalProperties ist es möglich die Standard-Log-Ausgaben des Tomcats in entsprechende Knotenabhängige Log-Files umzuleiten:

  • B3P_LOG4J_REDIRECT_STDOUT
  • B3P_LOG4J_REDIRECT_STDERR

Wurden beide auf true gesetzt, so werden pro Knoten zwei weitere Log-Dateien erstellt:

View Me   Edit Me