tinylog: Die schlanke log4j-Alternative

Logging-Writers

Standardgemäß werden in tinylog alle Log-Einträge in der Konsole ausgegeben. Dies sieht für das Beispiel in Listing 2 wie folgt aus:

2012-08-14 08:52:27 [main] Application.main()

INFO: Mein Log-Eintrag …

Neben dem eigentlichen Text enthält der Log-Eintrag das Logging-Level, einen Timestamp mit Datum und Uhrzeit, den Namen des Threads sowie die Klasse und Methode, in der der Log-Eintrag erzeugt wurde. Die Ausgabe lässt sich über das Property „tinylog.format“ beliebig mit einem Pattern anpassen. So können z.B. zusätzlich der Name der Java-Datei und die Codezeile mit ausgegeben oder der ganze Log-Eintrag in einer einzigen Zeile geschrieben werden.

In produktiven Umgebungen ist normalerweise die Ausgabe der Log-Einträge in Log-Dateien gewünscht. Der FileWriter schreibt alle Log-Einträge in eine konfigurierbare Log-Datei, die bei jedem Start geleert wird. Weitaus mächtiger ist der RollingFileWriter. Dieser kann eine beliebige Anzahl von alten Log-Dateien als Backup aufheben und nach konfigurierbaren Events neue Log-Dateien beginnen. Dies ist vor allem für langlaufende Anwendungen – wie z.B. Server – sinnvoll, damit die Log-Datei nicht irgendwann GBs belegt und die Festplatte vollläuft. So lassen sich z.B. alte Log-Dateien für den Zeitraum von sieben Tagen erhalten und täglich um Mitternacht eine neue Log-Datei beginnen:

tinylog.writer=rollingfile
tinylog.writer.filename=log.txt
tinylog.writer.policies=daily: 00:00
tinylog.writer.backups=7

Sollten die vorhandenen Logging-Writers nicht ausreichen, können auch eigene geschrieben werden. Hierzu muss nur das Interface LoggingWriter implementiert werden. Der neue Logging-Writer kann anschließend als Service registriert und somit wie die bereits vorhandenen über Properties konfiguriert werden.

Performance

Für die Entwicklung von tinylog ist die Performance ein ganz entscheidender Punkt. Aus diesem Grund beinhaltet das Projekt einen automatischen Benchmark, um zu verhindern, dass neue Features die Performance beeinträchtigen. Auf den ersten Blick mag es vielleicht irritierend sein, warum gerade für ein Logger-Projekt das Thema Performance so wichtig ist. Bei zeitkritischen Anwendungen kann Loggen möglicherweise zu Performance-Problemen führen. Bei schnellen Internetzugängen sollte google.de nicht viel mehr als 100ms benötigen, um die Startseite an den Browser zu senden. Um solche Reaktionszeiten zu erreichen, dürfen nicht viele Millisekunden für das Loggen verloren gehen. Ähnlich sieht es bei grafischen Anwendungen aus: 60fps bedeuten 16,67ms Zeit pro Frame!

Um zu verhindern, dass die eigentliche Anwendung durch Schreib-Operationen des Loggers ausgebremst wird, kann ein separater Writing-Thread aktiviert werden. Dieser Thread läuft mit niedriger Priorität und kümmert sich um das Schreiben der erzeugten Log-Einträge. Sobald der Main-Thread fertig ist, beendet sich der Writing-Thread automatisch. Der Writing-Thread kann auch so konfiguriert werden, dass er auf einen beliebigen anderen Thread wartet.

Ausblick

Tinylog befindet sich in der öffentlichen Beta-Phase. Die Version 1.0 des Open-Source-Loggers ist für Ende 2012 geplant. Vorschläge für neue Funktionalität oder das Melden von Bugs sind ausdrücklich erwünscht. Bis zur Version 1.0 sind noch zwei weitere Testversionen vorgesehen, so dass noch ausreichend Zeit für neue Funktionalität bleibt. Es gibt Planungen zur Unterstützung von mehreren parallelen Logging-Writers, und die Entwicklung eine Facade für log4j ist bereits in Gange. Die log4j-Facade ermöglicht es, Log-Einträge, die über die log4j API erzeugt werden, an tinylog weiterzuleiten. Dies soll es vereinfachen, bestehende Programme auf tinylog umzustellen, und es ermöglichen, externe Bibliotheken, die log4j nutzen, mit tinylog zu verwenden. Tinylog kann unter http://www.tinylog.org/de/download heruntergeladen werden und steht unter der Apache License 2, die auch die Verwendung von tinylog in kommerziellen Projekten erlaubt.

Martin Winandy ist Diplom(BA)-Informatiker und arbeitet seit 2008 im Bereich Product Data Management mit dem Schwerpunkt Eclipse-RCP-Entwicklung. Er ist der Initiator von tinylog. Sie können ihn unter martin.winandy@tinylog.org erreichen.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.