tinylog: schlanke log4j-Alternative für Java

Logging light

Martin Winandy


Das Protokollieren des Programmablaufs vereinfacht die Fehlersuche und das Reproduzieren von Bugs. Dabei macht die Anwendung mithilfe eines Loggers regelmäßig Ausschriebe über den Programmablauf und aufgetretene Fehler. Später kann der Entwickler für gemeldete Bugs anhand der erzeugten Log-Dateien problemlos nachvollziehen, was im Programm genau während des Fehlers passiert ist. Dies ist besonders bei Bugs hilfreich, die in Produktion oder beim Kunden auftauchen. Damit Log-Dateien wirklich hilfreich sind, muss eine Anwendung genügend und vor allem aussagekräftige Log-Einträge ausgeben, und das liegt allein in der Hand der Entwickler. Je einfacher ein Logging-Framework zu verwenden ist, desto häufiger wird es auch tatsächlich genutzt – und der Programmablauf damit umso lückenloser protokolliert.

„tinylog“ [1] ist ein schlankes Logging-Framework für Java, das eine Alternative zum De-facto-Standard ­log4j darstellt. Die Idee zu tinylog entstand aus mehreren Verbesserungsvorschlägen für log4j [2] und mündete schließlich in ein eigenes Open-Source-Projekt:

Das Erzeugen einer Logger-Instanz für jede Klasse, in der geloggt werden soll, ist umständlich und fehleranfällig.Texte in den Logging-Methoden können weder formatiert noch mit Parametern versehen werden.In Anwendungen, bei denen es auf schnelle Reaktionszeiten ankommt, kann das Erzeugen und Schreiben von Log-Einträgen zu Performanceproblemen führen.

Statischer Logger

In den drei großen bekannten Logging-Frameworks log4j, Logback [3] und dem Java-Logging-API [4] wird üblicherweise für jede Klasse eine eigene Logger-Instanz erzeugt. In log4j sieht dies beispielsweise wie in Listing 1 aus.

Listing 1import org.apache.log4j.Logger; public class Application {  private static final Logger logger = Logger.getLogger(Application.class);  public static void main(String[] args) { logger.info("Mein Log-Eintrag ..."); }}

Die Instanziierungsanweisung in Zeile 5 wird in jeder Klasse benötigt und daher oft per Copy and Paste aus einer anderen Klasse herauskopiert. Dabei kann leicht vergessen werden, den Klassenparameter zu ändern. Dies führt dazu, dass falsche Log-Einträge erzeugt werden. In tinylog gibt es nur einen einzigen Logger, der statisch ist. Damit entfällt das Instanziieren eines Loggers (Listing 2).

Listing 2import org.pmw.tinylog.Logger; public class Application {  public static void main(final String[] args) { Logger.info("Mein Log-Eintrag ..."); } }

Zu loggende Texte können in tinylog formatiert und mit P...

tinylog: schlanke log4j-Alternative für Java

Logging light

Martin Winandy


Das Protokollieren des Programmablaufs vereinfacht die Fehlersuche und das Reproduzieren von Bugs. Dabei macht die Anwendung mithilfe eines Loggers regelmäßig Ausschriebe über den Programmablauf und aufgetretene Fehler. Später kann der Entwickler für gemeldete Bugs anhand der erzeugten Log-Dateien problemlos nachvollziehen, was im Programm genau während des Fehlers passiert ist. Dies ist besonders bei Bugs hilfreich, die in Produktion oder beim Kunden auftauchen. Damit Log-Dateien wirklich hilfreich sind, muss eine Anwendung genügend und vor allem aussagekräftige Log-Einträge ausgeben, und das liegt allein in der Hand der Entwickler. Je einfacher ein Logging-Framework zu verwenden ist, desto häufiger wird es auch tatsächlich genutzt – und der Programmablauf damit umso lückenloser protokolliert.

„tinylog“ [1] ist ein schlankes Logging-Framework für Java, das eine Alternative zum De-facto-Standard ­log4j darstellt. Die Idee zu tinylog entstand aus mehreren Verbesserungsvorschlägen für log4j [2] und mündete schließlich in ein eigenes Open-Source-Projekt:

Das Erzeugen einer Logger-Instanz für jede Klasse, in der geloggt werden soll, ist umständlich und fehleranfällig.Texte in den Logging-Methoden können weder formatiert noch mit Parametern versehen werden.In Anwendungen, bei denen es auf schnelle Reaktionszeiten ankommt, kann das Erzeugen und Schreiben von Log-Einträgen zu Performanceproblemen führen.

Statischer Logger

In den drei großen bekannten Logging-Frameworks log4j, Logback [3] und dem Java-Logging-API [4] wird üblicherweise für jede Klasse eine eigene Logger-Instanz erzeugt. In log4j sieht dies beispielsweise wie in Listing 1 aus.

Listing 1import org.apache.log4j.Logger; public class Application {  private static final Logger logger = Logger.getLogger(Application.class);  public static void main(String[] args) { logger.info("Mein Log-Eintrag ..."); }}

Die Instanziierungsanweisung in Zeile 5 wird in jeder Klasse benötigt und daher oft per Copy and Paste aus einer anderen Klasse herauskopiert. Dabei kann leicht vergessen werden, den Klassenparameter zu ändern. Dies führt dazu, dass falsche Log-Einträge erzeugt werden. In tinylog gibt es nur einen einzigen Logger, der statisch ist. Damit entfällt das Instanziieren eines Loggers (Listing 2).

Listing 2import org.pmw.tinylog.Logger; public class Application {  public static void main(final String[] args) { Logger.info("Mein Log-Eintrag ..."); } }

Zu loggende Texte können in tinylog formatiert und mit P...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang