Simple Logging Facade for Java (SLF4J)
Simple Logging Facade for Java (SLF4J) stellt eine externe Java-Bibliothek dar, die das Protokollieren in Java-Anwendungen ermöglicht. Protokollierung (Logging) ist ein wesentlicher Bestandteil der Softwareentwicklung und -wartung und bietet zahlreiche Vorteile wie Fehlerbehebung, Überwachung, Audit, Compliance, Debugging, Leistungsanalyse sowie Benutzerunterstützung. Durch die effektive Nutzung von Protokollierung kann die Zuverlässigkeit, Sicherheit und Leistung einer Anwendung erheblich verbessert werden.
Protokollierungs-Level
SLF4J definiert verschiedene Protokollierungs-Level, die die Schwere oder Wichtigkeit der zu protokollierenden Nachrichten angeben.
Level | Beschreibung |
---|---|
TRACE | Sehr detaillierte Informationen für die Fehlersuche (z.B. Methodenname) |
DEBUG | Detaillierte Informationen für den Entwickler (z.B. Variablenwert) |
INFO | Allgemeine Informationsmeldungen, die den normalen Betrieb der Anwendung beschreiben |
WARN | Warnungen, die auf potenzielle Probleme hinweisen, die jedoch nicht sofort behoben werden müssen |
ERROR | Fehler, die den normalen Betrieb der Anwendung beeinträchtigen und ggbfs. den sofortigen Abbruch der Anwendung erfordern |
Protokollierungs-Implementierungen
Die Art der Speicherung von Protokollen in einer Anwendung, die SLF4J verwendet, hängt von der konkreten Implementierung ab. SLF4J selbst ist dabei nur eine Fassade und benötigt eine konkrete Implementierung, um die tatsächliche Protokollierung durchzuführen. Eine der am weitesten verbreiteten Protokollierungs-Bibliotheken für Java ist Log4J, welches die Ausgabe von Protokollen auf der Konsole sowie in Protokoll-Dateien ermöglicht.
Beispiel
Für die Klasse MainClass
wird ein Logger initialisiert, mit dessen Hilfe
verschiedene Nachrichten in der Datei logs/app.log protokolliert werden.
- Startklasse
- Log4J-Konfigurationsdatei
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;
}
}
log4j.rootLogger=debug, file, console
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.file=logs/app.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n