Log4j 2 / SLF4J für Java: Vollständiger Leitfaden mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist diese Bibliothek und wozu wird sie benötigt

\n\n

Log4j 2 und SLF4J sind zwei miteinander verbundene Bibliotheken für das Logging in Java, die in der Unternehmensentwicklung als De-facto-Standard gelten. SLF4J (Simple Logging Facade for Java) ist eine Fassade (Abstraktion), die eine einheitliche API für verschiedene Logging-Frameworks bereitstellt. Log4j 2 ist eine der leistungsstärksten und effizientesten Implementierungen dieser API.

\n\n

Wozu wird dies benötigt? Logging ist der Prozess der Aufzeichnung von Informationen über den Betrieb einer Anwendung: Fehler, Warnungen, Informationsmeldungen, Debug-Informationen. Ohne ein Logging-System sind Entwickler gezwungen, System.out.println() zu verwenden, was zu Folgendem führt:

\n
    \n
  • Unmöglichkeit, die Ausgabe flexibel zu steuern (Logs für verschiedene Teile der Anwendung ein-/ausschalten)
  • \n
  • Fehlende Logging-Stufen (INFO, WARN, ERROR, DEBUG)
  • \n
  • Leistungsprobleme (Zeichenkettenverkettung, selbst wenn Logs deaktiviert sind)
  • \n
  • Fehlende Ausgabeformate (Datum, Uhrzeit, Klassenname, Thread)
  • \n
\n\n

Log4j 2 löst all diese Probleme. Es unterstützt asynchrones Logging, Filter, Appender (Ausgabe in Datei, Konsole, Datenbank, Netzwerk), Log-Rotation und viele weitere erweiterte Funktionen. SLF4J ermöglicht bei Bedarf den Wechsel von Log4j 2 zu Logback oder java.util.logging, ohne den Code ändern zu müssen.

\n\n

Installation

\n\n

Für Java-Projekte erfolgt die Installation über die Build-Systeme Maven oder Gradle. Im Gegensatz zu Python (pip) oder Node.js (npm) wird in Java die Abhängigkeitsverwaltung über Konfigurationsdateien durchgeführt.

\n\n

Maven (pom.xml)

\n
<!-- SLF4J API + Log4j 2 als Implementierung -->\n<dependency>\n    <groupId>org.apache.logging.log4j</groupId>\n    <artifactId>log4j-slf4j-impl</artifactId>\n    <version>2.20.0</version>\n</dependency>\n\n<!-- Haupt-API von Log4j 2 (falls SLF4J nicht verwendet wird) -->\n<dependency>\n    <groupId>org.apache.logging.log4j</groupId>\n    <artifactId>log4j-core</artifactId>\n    <version>2.20.0</version>\n</dependency>
\n\n

Gradle (build.gradle)

\n
dependencies {\n    implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0'\n    implementation 'org.apache.logging.log4j:log4j-core:2.20.0'\n}
\n\n

Fügen Sie nach dem Hinzufügen der Abhängigkeiten eine Konfigurationsdatei log4j2.xml im Ordner src/main/resources hinzu:

\n
<?xml version="1.0" encoding="UTF-8"?>\n<Configuration status="WARN">\n    <Appenders>\n        <Console name="Console" target="SYSTEM_OUT">\n            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>\n        </Console>\n    </Appenders>\n    <Loggers>\n        <Root level="info">\n            <AppenderRef ref="Console"/>\n        </Root>\n    </Loggers>\n</Configuration>
\n\n

Schnellstart mit Codebeispiel

\n\n

Erstellen Sie eine einfache Java-Klasse zur Demonstration:

\n
import org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\npublic class QuickStart {\n    // Logger für die aktuelle Klasse erstellen\n    private static final Logger logger = LoggerFactory.getLogger(QuickStart.class);\n\n    public static void main(String[] args) {\n        logger.info("Anwendung gestartet");\n        logger.debug("Dies ist eine Debug-Nachricht");\n        logger.warn("Warnung: Ressourcen werden knapp");\n        logger.error("Kritischer Fehler: {}", "Division durch Null");\n\n        try {\n            int result = 10 / 0;\n        } catch (ArithmeticException e) {\n            logger.error("Fehler bei der Berechnung", e);\n        }\n    }\n}
\n\n

Die Konsolenausgabe sieht wie folgt aus:

\n
14:30:15.123 [main] INFO  QuickStart - Anwendung gestartet\n14:30:15.125 [main] WARN  Q                    

Empfehlungen