Zum Hauptinhalt springen

Simple Logging Facade for Java (SLF4J)

Simple Logging Facade for Java (SLF4J) ist eine externe Java-Bibliothek für strukturiertes Logging. Logging ist ein zentraler Bestandteil professioneller Softwareentwicklung und unterstützt bei Fehlerbehebung, Überwachung, Debugging und Leistungsanalyse. SLF4J ist eine Abstraktionsschicht (Fassade) und benötigt eine konkrete Logging-Implementierung, z.B. Log4J.

Protokollierungs-Level

SLF4J definiert fünf Protokollierungs-Level, die die Schwere oder Wichtigkeit einer Nachricht angeben.

LevelBeschreibung
TRACESehr detaillierte Informationen für die Fehlersuche (z.B. Methodenname)
DEBUGDetaillierte Informationen für den Entwickler (z.B. Variablenwert)
INFOAllgemeine Informationsmeldungen, die den normalen Betrieb der Anwendung beschreiben
WARNWarnungen, die auf potenzielle Probleme hinweisen, die jedoch nicht sofort behoben werden müssen
ERRORFehler, die den normalen Betrieb der Anwendung beeinträchtigen und ggbfs. den sofortigen Abbruch der Anwendung erfordern

Protokollierungs-Implementierungen

SLF4J selbst ist nur eine Fassade und führt keine Protokollierung durch. Für die tatsächliche Ausgabe ist eine konkrete Implementierung nötig. Eine der gebräuchlichsten ist Log4J, das Protokolle sowohl auf der Konsole als auch in Dateien ausgeben kann.

Beispiel

Die Klasse Names liest Namen aus einer Datei. Ein Logger protokolliert dabei die wichtigsten Schritte und schreibt die Ausgaben in die Datei logs/app.log.

Names.java
public class Names {

private final static Logger logger = LoggerFactory.getLogger(Names.class);

public static List<String> getNames(File file) throws IOException {
List<String> names = new ArrayList<>();
logger.info("Name list has been initialized successfully");

if (!file.exists()) {
logger.error("File {} does not exist", file);
throw new IOException();
}

Scanner scanner = new Scanner(file);
logger.info("File Scanner has been initialized successfully");

while (scanner.hasNextLine()) {
String name = scanner.nextLine();
logger.debug(name);
names.add(name);
}
logger.info("{} names have been read", names.size());

scanner.close();
logger.info("File {} has been closed successfully", file);

return names;
}

}