Garbage-free Steady State Logging

Apache Log4j 2.6 läuft nun auch ohne Müll

Dominik Mohilo

© Apache Software Foundation

Das beliebte Logging-Framework Apache Log4j wurde speziell für das Aufzeichnen der Verhaltensweisen von Applikationen entwickelt. Mit Log4j 2 wurde das mittlerweile veraltete Log4j 1.x abgelöst, durch neue Funktionen erweitert und grundsätzlich überarbeitet. Jetzt ist die aktuelle Version Apache Log4j 2.6 erschienen, in der die Möglichkeit eingeführt wurde, Log4j auch „Garbage-Free“ auszuführen.

Log4j 2.6: Garbage-freies Logging

Das wichtigste neue Feature von Apache Log4j 2.6 ist die Fähigkeit, das Anlegen temporärer Objekte zu verhindern. Das sogenannte Garbage-free Steady State Logging ist in der aktuellen Version des Logging-Frameworks möglich, sofern gewisse Voraussetzungen erfüllt werden. Da die Pausen für das Sammeln von Garbage oftmals die Latenz beeinträchtigen und in vielen Systemen ein immenser Aufwand betreiben wird, um diese Pausen zu kontrollieren, wurde das Garbage-freie Logging als Standard-Einstellung für Version 2.6 implementiert.

Beim Garbage-free Steady State Logging werden Objekte und Buffer wiederverwendet, anstatt immer neue temporäre Objekte zu sammeln. Ein Low-Garbage-Modus ist ebenfalls verfügbar, der nicht komplett frei von Garbage-Ansammlungen ist, allerdings nicht die ThreadLocal-Felder verwendet. Dieser Modus wird standardmäßig verwendet, wenn Log4j erkennt, dass es in einer Web-Applikation verwendet wird. Auch der klassische Modus, der alle Garbage-free-Logiken ignoriert, ist weiterhin nutzbar.

Java-Champion Kirk Pepperdine begrüßte in der Google Gruppe Mechanical-Sympathy das Update von Log4j und das neue Garbage-free Steady State Logging, denn:

Logging in Java is in a very sad state. To date, I’ve rarely run into a customer whose system wasn’t somehow negativity impacted by logging. My extreme case is a customer that was facing a 4.5 seconds time budget where logging accounted for 4.2 seconds (big portion was pressure on the async appender). I will be looking with great interest at this release.

Weitere Features

Genaue Informationen zur Konfiguration von Log4j gibt es auf der Webseite von Log4j.

Das zehnte große Release des Logging-Frameworks hat außerdem ein neues YAML-Layout im Gepäck und bringt die Möglichkeit mit, Konfigurationsdateien miteinander verschmelzen zu lassen. Außerdem kann man nun die (vorher dokumentierte) Performance von Log4j mit der von anderen Logging-Frameworks vergleichen. Das funktioniert vor allem auch unter vorher festgelegten unterschiedlichen Logging-Konfigurationen.

Eine komplette Änderungsübersicht zu Log4j 2.6 ist in Apaches Mailarchiv verfügbar.

Apache Log4j

Bereits 20 Jahre hat Log4j auf dem Buckel. Ceki Gülcü entwickelte das Logging-Framework 1996, das heute in vielen Projekten kommerzieller oder Open-Source-Software als Standard gilt. Mittlerweile ist das Logging-Framework fester Bestandteil des Apache Logging-Projektes, ist nach wie vor quelloffen (Apache-Lizenz 2.0) und Vorbild für zahlreiche Logging-Tools, die sich nicht nur namentlich, sondern auch funktionell nah am Vorbild orientieren. Diese sind allerdings nur zum Teil ebenfalls im Logging-Projekt der Apache Foundation beheimated (etwa Log4php oder Log4cxx).

Log4j dient in erster Linie dazu, auftretende Fehler auf der Standardausgabe auszugeben, sondern Meldungen über Logger an den Appender (das entsprechende Loggingsystem) weiterzuleiten. Log4j ermittelt, wohin die Weiterleitung stattfinden muss, gleichzeitig aber auch, ob die Weiterleitung überhaupt stattfindet. Diese Entscheidung basiert auf dem sogenannten Log-Level, also auf der jeweiligen Wichtigkeit des Fehlers oder der Meldung.

Mit Apacha Log4j 2 veröffentlichten die Entwickler des Projektes eine von Grund auf überarbeitete Fassung, die viele Fehler der vorherigen Version 1.x ausbesserte, aber essentielle und wichtige Teile der Vorversion übernahmen. Revolutionär war insbesondere die Einführung asynchroner Logger, bei denen I/O-Operationen in einem separaten Thread ausgeführt wurden. Ein bis zu 68-fach höherer Datenfluss konnte im Vergleich zum synchronen Modell festgestellt werden. Zudem gab es seit der Einführung 2014 endlich die Möglichkeit Log4j mit JSON zu konfigurieren und eine Plug-in-Architektur wurde implementiert.

Geschrieben von
Dominik Mohilo
Dominik Mohilo
Dominik Mohilo studierte Germanistik und Soziologie an der Goethe-Universität in Frankfurt. Seit 2015 ist er Redakteur bei S&S-Media.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: