SucheBlog abonnierenVerwaltung des BlogsKategorienKontaktMarkus Brückner |
Freitag, 22. April 2011Neuer Release des Logging-TemplatesIrgendwann vor langer, langer Zeit (laut Versionshistory mittlerweile 5 Jahre her) hatte ich mal als Fingerübung ein Logging-Template in C++ geschrieben, was sich anfühlen sollte wie std::cout. Ziel war den geneigten Programmierer vom Denken zu entlasten und ihm quasi std::cout-Debugging mit etwas mehr Möglichkeiten zu erlauben. Hat offenbar damals schon gut gepasst, kurz darauf kam nämlich die Fähigkeit zur Anpassung an verschiedene Multithread-Umgebungen via Policy-Klasse dazu. Dann lag das ganze erstmal 5 Jahre im Dornröschenschlaf, in denen ich es zwar hin und wieder genutzt habe, aber eigentlich keine neuen Fähigkeiten brauchte. Bis vor kurzem... Daher jetzt: tada! ein komplett neues Release, in dem sich so einiges geändert hat. Das Frontend an sich bleibt gleich (sprich: existierender Code sollte problemlos weiter kompilieren, es sei denn er macht was total dämliches und verwendet zweimal einen Log-Level in einer Nachricht). Im Hintergrund hat sich allerdings einiges getan. Erstmal wurde der Code etwas aufgeräumt, da sich dort von verschiedenen Experimenten Reste angesammelt hatten. Dann wurde das Handling der Loglevel komplett umgebaut um eine flexiblere Ausgabe nach unten zu ermöglichen. Hintergrund: ich brauche für ein Projekt gerade die Möglichkeit Daten ins Syslog auszugeben. Dazu muss der zugrundeliegende Ausgabestream aber das Log-Level wissen. Außerdem muss er zuverlässig wissen, wann eine Nachricht beendet ist. Beides stellt das Frontend jetzt sicher. Weil's so schön war habe ich gleich noch den passenden SyslogStream beigelegt, der das Loggingfrontend an syslog() anklemmt. Benutzung ist wie üblich relativ einfach:
#include <syslogstream.hxx>
use namespace Logging;
int main(int argc, char *argv[]) {
SyslogStream slog("TestLogger");
Syslogger logger(slog, LEVEL_INFO);
logger << LEVEL_INFO << "This an INFO message which has a number attached: " << 12345 << std::endl;
logger << LEVEL_WARNING << "This is a warning message." << std::endl;
return 0;
}
Dieser Code schreibt zwei Nachrichten unter dem Präfix TestLogger ins Syslog. Die Doku der Klassen gibt noch einige Informationen her, welche Eigenschaften man zusätzlich konfigurieren kann. Das Logging-Frontend kann dank std::ostream-Kompatibilität natürlich jedes Element ausgeben, welches auf einem ostream ausgegeben werden könnte. Der Code ist weiterhin header-only, braucht also keine Installation irgendwelcher Bibliotheken, sondern kann dan public-domain-Lizenz einfach ins eigene Projekt mit übernommen werden. Wer nett sein will: mich interessiert immer, wo der Code verwendet wird. Kurze Mail an mich wäre nett (hm... sollte ich vielleicht mal in die Lizenz schreiben...) Der Code ist mittlerweile umgezogen und liegt bei Bitbucket: https://bitbucket.org/namenlos/logging/
(Seite 1 von 1, insgesamt 1 Einträge)
|