Basis des Logging-Systems

Informationen

  • Ziel der Entwicklung des hier beschriebenen Logging-Systems war die Vereinheitlichung der unterschiedlichen Mechanismen, die zur Sammlung von Meldungen dienten.
  • Hierbei stand die hohe Anpassbarkeit und Zukunftssicherheit im Fokus.
  • Aufgrund der seit Server 39.5 bestehenden Java-Basis lag die Auswahl eines der zahlreichen in der Java-Welt vorhandenen Logging-Systeme nahe.
  • Die Logging-Fassade SLF4J gepaart mit deren nativer Implementierung Logback zählt unter diesen Systemen zu den fortgeschrittensten.

SLF4J/Logback

  • Wie bei Logging-Systemen üblich wird ein Logger mit einem Namen versehen (meist der voll qualifizierte Klassenname).
  • Log-Nachrichten werden vom Entwickler zusammen mit dem Log-Level, einer Einschätzung der Wichtigkeit der Meldung, diesem Logger übergeben.
  • Log-Levels in SLF4J sind error > warn > info > debug > trace , wobei die Sortierung hier die Wichtigkeit der Nachricht wiederspiegelt.
  • SLF4J ist eine Logging-Fassade; so können zur Kompilierzeit verschiedene Logging-Systeme eingebunden werden (nähere Informationen hierzu finden Sie auf slf4j.org).
  • Eine von den Log-Nachrichten (und vom Quelltext) unabhängige Konfiguration erlaubt die Filterung von Nachrichten und formatierte Ausgabe, die üblicherweise in Dateien erfolgt.
  • SLF4J im Zusammenspiel mit dessen nativer Implementierung Logback bietet besondere Konzepte, die auch im PLANTA-Server Verwendung finden:
    • Mapped Diagnostic Context (MDC): Hier können im Thread-Kontext Schlüsselwert-Paare hinzugefügt werden, mit deren Hilfe Nachrichten dieses Kontextes gesondert behandelt werden können.
    • Marker: Nachrichten können hierdurch "eingefärbt" werden; auch dies erlaubt eine weitreichendere Filterung (z.B. thematische Aufspaltung von Log-Dateien).
  • Die Konfigurationsmöglichkeiten von Logback sind sehr reichhaltig, weshalb Details auf der entsprechenden Dokumentationsseite nachzuschlagen sind.

Hinweis

  • Die bisherigen Logging-Systeme (Eigenentwicklung und Log4j) werden durch das beschriebene Logging-System abgelöst.

PLANTA-spezifische Dokumentation

Nachrichtenidentifikatoren

Details

  • Log-Nachrichten, die ein Log-Level von error , warn oder info besitzen, erhalten einen Nachrichtenidentifikator.
  • Dieser wird in dem Nachrichtentext in Form einer Nummer angegeben.
  • Über diesen Identifikator kann die Beschreibung der Nachricht und, sollte es sich um einen Fehler handeln, Behebungsmaßnahmen eingesehen werden.
  • Ein Verzeichnis aller mit Identifikatoren versehenen Nachrichten ist hier zu finden.

Thematische Einordnung von Nachrichten über Marker

Details

  • In PLANTA-Server dient das Marker-Konzept zur thematischen Einordnung einer Nachricht.
  • Dies erlaubt beispielsweise, einem Benutzer mit fachlichem Hintergrund für ihn wichtige Nachrichten auszugeben, ohne dass administrative Benutzer von für sie unwichtigen Informationen überflutet werden.
  • So können für jeden thematischen Komplex Log-Dateien konfiguriert werden, in die die entsprechenden Nachrichten einsortiert werden, wobei auch Überschneidungen berücksichtigt werden können.
  • In PLANTA-Server werden nur die mit Identifikator versehenen Log-Nachrichten entsprechend markiert; das Nachrichtenverzeichnis gibt die Zuordnungen an.

Aktualisierung der Konfiguration im laufenden Betrieb

Information

  • Die mitgelieferte Konfiguration befindet sich im Installationsverzeichnis unter conf/logback.xml.

Details

  • Logback ermöglicht Konfigurationsänderungen im laufenden Betrieb, sowohl über die Logback-API als auch über die Konfigurationsdatei.
  • Der folgende Ausschnitt zeigt, wie in der mitgelieferten Konfiguration die automatische Aktualisierung der Konfiguration eingeschaltet wird:
<configuration scan="true" scanPeriod="1 minute">
[...]
</configuration>
CODE
  • Die Anweisung scan="true" aktiviert hier die Aktualisierung, über scanPeriod="1 minute" prüft Logback die Konfigurationsdatei jede Minute auf Änderungen.
  • Das in PLANTA-Server implementierte Logging-System umfasst auch native Teile, die von Logback selbst nicht entsprechend aktualisiert werden können.
  • Daher muss die folgende PLANTA-spezifische Anweisung in der zu aktualisierenden Konfigurationsdatei vorhanden sein (wie in der mitgelieferten Konfiguration enthalten):
<contextListener class="de.planta.server.logging.NativeLevelChangePropagator"/>
CODE
  • Zu beachten ist bei der Aktualisierung, dass auch nach Ablauf der konfigurierten scanPeriod die Konfigurationsaktualisierung nicht zwingend sofort durchgeführt wird.
  • Dem liegt zugrunde, dass Logback aus Performance-Gründen die Prüfung nur beim Auftreten jeder 16. Log-Nachricht durchführt.
  • Somit ist es u.U. erforderlich, eine Aktion zu starten (z.B. eine Client-Verbindung herzustellen), um die Aktualisierung zu starten.

Log-Dateien

Details

  • Über die mitgelieferte Konfiguration werden alle Log-Dateien im Verzeichnis log/ des Arbeitsverzeichnisses von PLANTA-Server angelegt.
  • Für den Betrieb relevante Log-Nachrichten werden hier in der Datei PLANTAServer.log ausgegeben.
  • Über eine größenbasierte Rotation (mit Schwellwert von 5 MB) wird eine Historie von maximal 10 komprimierten Dateien angelegt, die nach dem Schema PLANTAServer.[NUMMER].log.zip benannt sind.
  • Ist ein session-basiertes Logging aktiv (die Vorgehensweise hierzu siehe das nächste Kapitel), so wird für jede Session eine Datei PLANTASession-[SessionID].log erstellt, in die zur Session gehörige Nachrichten ausgegeben werden.
  • Session-Logfiles sind defaultmäßig mit Rotation eingerichtet.

Session-basiertes Logging für Fehleranalysen

Information

  • Um die Erstellung eines session-basierten Logfiles für die Fehleranalyse zu aktivieren, ist es nicht mehr notwendig, die Anpassungen in der logback.xml -Datei vorzunehmen. PLANTA stellt eine zweite Datei logback_debug.xml zur Verfügung, die bereits alle notwendigen Einstellungen beinhaltet. Die beiden Dateien müssen lediglich nur umbenannt werden, damit das Logging aktiviert wird und die Umbenennung wieder rückgängig gemacht werden, wenn das Logging ausgeschaltet werden soll.

Vorgehensweise

  • Die Datei logback.xml beliebig umbenennen.
  • Die Datei logback_debug.xml in logback.xml umbenennen.
  • Nachdem das Logfile erstellt wurde, die Umbenennungen der Dateien rückgängig machen.

Spezielle Namensräume

NamensraumBeschreibung
de.planta.serverDer Namensraum des PLANTA-Servers
de.planta.server.nativeLog-Nachrichten aus den nativen Programmteilen werden innerhalb dieses Namensraumes ausgegeben
de.planta.server.pythonAus dem Python-Kontext über die Schnittstelle gesendete Nachrichten werden innerhalb dieses Namensraumes ausgegeben