Loggen mit log4j
ETIS 2004
Gliederung
• Motivation
• Geschichte
• Logger
• Appender
• Layout
• Konfiguration
• Log4j vs. Sun‘ s Logging API
• Zusammenfassung
Log4J
2
Motivation Log4J (I)
• Loggen in vielen Projekten benötigt (in Entwicklung +
produktiver Umgebung)
• Low level debug-Methode
• Aufgaben:
– Innere Abläufe der Anwendung verfolgen
• Informationen über den Zustand des Programms
• Informationen über wichtige Ereignisse
– Variablenwerte kontrollieren
• Fehlersuche
Log4J
3
Motivation Log4J (II)
• System.out.print(...)
– Meldungen nicht abschaltbar (nur löschbar), nicht
staffelbar
– nur Standardausgabe
• Fehlersuche mit Debugger:
– Problem, wenn nicht verfügbar
– Debugging transient - Logaufrufe bleiben im Programm
– Loggen oft schneller
• Selber programmieren belastet eigentliches Projekt
zusätzlich
Log4J
4
Motivation Log4j (III)
• Evtl. Probleme beim Loggen:
– Anwendung verlangsamt
– Informationen schwer finden
• Ziele Log4J:
– Wenig Performanceverluste durch Logging
• klassifizierbare Informationen (z.B. Ausschalten
bestimmter Loginformationen)
– Anwendung zur Laufzeit konfigurierbar
• Loginformationen an- und ausschalten
• frei definierbare Ausgabeformate/-orte der LogMeldungen
Log4J
5
Geschichte
• Open Source Projekt, um Log-Statements in eine
Anwendung zu bringen (de facto Standard)
• Apaches Jakarta Projekt
• einsetzbar ab JDK 1.1
• Hauptbestandteile:
– Logger
(Wird geloggt?)
– Appender (Wohin?)
– Layouts (Format?)
Log4J
6
Klasse Logger
• Kernkomponente
• Klassenname als Loggername ist Konvention
• Bereitstellung als statische Variable in Anwendung
• private static Logger logger =
Logger.getLogger(“test.Sample“);
• Besitzt Methoden, um Meldungen auf verschiedenen
Stufen auszugeben (Stufen erweiterbar)
• logger.debug(“irgendwas“);
Log4J
7
Vordefinierte Log-Level
Normale Log-Level
DEBUG
feingranulare Informationsereignisse, zum Debuggen
INFO
informierende Nachrichten, groben Ablauf aufzeigen
WARN
potentiell nachteilige Situationen
ERROR
Fehler, Anwendung läuft evtl. weiter
FATAL
ernster Fehler, meist Abbruch der Anwendung
Spezielle Log-Level
ALL
niedrigste Priorität, Loggen anschalten
OFF
höchste Priorität, Loggen abschalten
ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF
Log4J
8
Log-Level (I)
• Logger haben bestimmtes Level
• z.B. Logger hat Level WARN (z.B. in
Konfigurationsdatei festgelegt)
• Log-Methoden haben bestimmtes Level
• z.B. c.info(...): Log-Meldung auf Level INFO
• Level des Loggers entscheidet, ob Log-Meldung
geschrieben wird
– Schreiben, wenn Level der Log-Methode höher oder
gleich dem Level seines Loggers
• INFO < WARN  c.info() ignoriert
Log4J
9
Log-Level (II)
• Logger bilden durch “.“ getrennte hierarchische Baum-Struktur
• z.B. java.sql.Connection
• Ein Root-Logger
• weitere Logger ein Vorfahr und evtl. mehrere Nachfahren
• java Vorfahr java.sql
• Level der Logger vererbbar, wenn nicht explizit gesetzt, z.B.
• java: INFO, java.sql: keine Zuweisung  java.sql = INFO
• java: INFO, java.sql: WARN  java.sql = WARN
• Wenn Klassenname = Loggername  Logging für einzelne
Klasse oder packages ein- und ausschaltbar
Log4J
10
Logging - Performance
Log-Statements bleiben i.d.R. im Code
• Versteckte Kosten für Parameterkonstruktion
• logger.debug(“irgendwas“);
• if-Statement als Performance-Wrapper
• if (logger.isDebugEnabled() == true){
• logger.debug(“irgendwas“ + ichBinTeuer());
• }
Log4J
11
Appender
• jedem Logger sind ein oder mehrere Appender zuordenbar
– Appender in Loggerhierarchie vererbt
• Appender legt fest, wohin geloggt wird
– z.B. Console, File, JDBC, SMTP... (können um eigene
erweitert werden)
• Vererbungskonzept Appender: Kinder des Loggers erben
automatisch alle Appender des Vaters
– z.B. Vater hat Konsole-Appender, Kind hat File-Appender
 Kind schreibt auf Konsole und in File
– Logger-Attribut additivity = false unterbindet Vererbung
Log4J
12
Layout
• Appender wird bei Konfiguration Layout-Pattern
übergeben
– optische Aufbesserung
– verbesserte Fehlersuche
• Z.B. PatternLayout, HTMLLayout, XMLLayout (können um
eigene erweitert werden)
• Pattern-Layout am flexibelsten, C printf-Funktion
nachempfunden
Log4J
13
Konfiguration
• Ziel: Logging-Verhalten zur Laufzeit konfigurieren
– in Konfigurationsdatei Verhalten einstellen
– für Anbindung an Konfigurationsdatei sorgen durch
einmaligen Aufruf von configure()
• BasicConfigurator
– ohne Konfigurationsdatei, belegt System mit sinnvollen
Startwerten
• PropertyConfigurator
– bezieht Daten aus Properties-Datei
• DOMConfigurator
– ähnlich P. Dateiformat XML
Log4J
14
Properties-Datei
•#obersten Logger auf DEBUG setzen, Appender: A1
•log4j.rootLogger = DEBUG, A1
•
•#A1 ist ConsoleAppender  Ausgabe auf Console
•log4j.appender.A1 = org.apache.log4j.ConsoleAppender
•#A1 verwendet ein Pattern Layout
•log4j.appender.A1.layout = org.apache.log4j.PatternLayout
•log4j.appender.A1.layout.ConversionPattern = [%d / %p / %c ]
- %m%n%n
Log4J
15
Log4J vs. Sun‘s Log API
• Ähnlichkeiten in Namensgebung (Klassen: Logger, Level)
• Konzept hierarchischer Logger ähnlich
• Log4J viele Appender, Sun 3 Handler
• Log4J Konfiguration in XML + Properties-Datei, Sun nur
Properties-Datei
• Log4J ab JDK 1.1, Sun erst ab 1.4
• Log4J gereift und robust, performanter, umfangreicher
• Portierungen für C/C++, Python, .NET
Log4J
16
Zusammenfassung
• open source
• gute Performance, Funktionalität, Handhabung
• gute Integrierbarkeit in eigene Anwendungen
• umfangreiche Erweiterungsmöglichkeiten
• in existierenden Systemen verwendet (JBoss)
• GUI-basierte Tools vorhanden (Chainsaw, LogFactor5)
• momentan besser als Sun‘ s Logging API, Wechsel
allerdings recht unproblematisch
Log4J
17
Quellen
•
Wille, S., Go To Java Server Pages, Addison-Wesley, München, 2001
•
Evertz, M.: Logger Dir Einen, Javamagazin, 11/2002, S.23
•
http://jakarta.apache.org/log4j/docs/documentation.html
•
http://www.linux-magazin.de/Artikel/ausgabe/2002/04/coffee/coffee.html
•
http://www.zdnet.de/builder/artikel/program/200208/java-logging-api_01-wc.html
•
http://www.jguru.com/faq/Log4j/
•
http://www.jsp-develop.de/knowledgebase/print/736/
•
Eickstädt, D., Reuhl, T., Java mit Open Source-Tools, Markt+Technik, München,
2003
Log4J
18

Uebung6SS04