iX 4/2021
S. 138
Praxis
C++-Tricks

Effizienteres Logging in C++-Programmen mit Expression Templates

Aufzeichnen und verlagern

Detlef Wilkening

Expression Templates lassen sich in C++ für viele Zwecke ein­setzen. Hier helfen sie dabei, Logging-Funktionen durch Lazy Evaluation des übergebenen Arguments effizienter zu machen.

Logging ist in vielen Systemen und Programmen ein wichtiges Hilfs­mittel, um Fehler zu finden, Abläufe nachzuvollziehen und Ressourcenengpässe aufzuspüren. Aus dieser Sicht sollte ein System so viel wie möglich protokollieren, damit später detaillierte Informationen zum Ablauf zur Verfügung stehen. Allerdings kann derart umfangreiches Logging das Verhalten eines Systems stark beeinflussen: Es benötigt viel Festplattenspeicher für Logdateien und kann den Programmablauf stark verlangsamen. Wer nur begrenzte Ressourcen verfügbar hat, sollte Logging folglich sparsam einsetzen.

Eine typische Lösung dieser beiden widersprüchlichen Anforderungen besteht darin, im Code viel Logging einzubauen, es zur Laufzeit aber nur bei Bedarf auszuführen. Meist definieren Entwickler hierfür sogenannte Loglevel, die zur Laufzeit mal mehr, mal weniger protokollieren. Im normalen Systembetrieb loggt der Prozess in der Regel nur die abstrakten Aktionen und Fehler mit, in detaillierteren Aus­wertungen zusätzliche Informationen wie Threads, Datenbankverbindungen und Speicher. Bei der Fehlersuche sind es Funktionsaufrufe und die Ausführung logischer Blöcke inklusive Parametern und Ergebnissen (Loglevelhierarchie siehe Abbildung).

Kommentieren