Design Logger
-
Hallo,
ich möchte einen Logger schreiben, der in verschiedene Datenquellen (Textdatei, Bildschirmausgabe,...) schreiben kann.
In good old C#/Java würde man ein Interface / eine abstrakte Klasse aufbauen und dann die verschiedenen Logger davon ableiten.
interface ILogger { void Log(int level, string msg); }In C++ geht das mit abstrakten Klassen ja genauso. Allerdings wollte ich hier mit Funktoren arbeiten, etwa
Logger log; log(1, "Übel übel");Nun müssen ja auch hier Informationen zur Datenquelle übergeben werden. Man könnte dazu wiederrum eine abstrakte Klasse LogSource aufbauen, entsprechende Datenquellenausgaben in Derivate kapseln und dem Funktor eine LogSource bei Konstruktion übergeben:
Logger log(FileSource("rofl.log")); log(1, "Übel übel");Wäre das "idiomatisches" C++?
Danke
-
Verpass einfach der Loggerklasse einen std::vector gefüllt mit Stream(buffern) und schreibe in die, Problem solved.
-
LogMan0815 schrieb:
Wäre das "idiomatisches" C++?
Eher nicht. Globale Variablen sind üblicher.
Bsp: http://google-glog.googlecode.com/svn/trunk/doc/glog.html