Effizienteres Logging in C++-Programmen mit Expression Templates
Aufzeichnen und verlagern
Expression Templates lassen sich in C++ für viele Zwecke einsetzen. Hier helfen sie dabei, Logging-Funktionen durch Lazy Evaluation des übergebenen Arguments effizienter zu machen.
Logging ist in vielen Systemen und Programmen ein wichtiges Hilfsmittel, 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 Auswertungen 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).