Ich habe den folgenden Code, der meine std::cout
Ausgabe in eine Protokolldatei umleitet.Hinzufügen Zeitstempel mit Std :: Cout
std::ofstream out("out.txt");
std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf
std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!
Nun, was ich will, ist, dass, wenn ein Zeilenumbruch auftritt, dann wird der aktuelle Zeitstempel wird in die Datei geschrieben werden.
Ich weiß, dass ich diese achive mit:
std::cout << getTime() << "printing data" << std::endl;
Aber was ich will, ist, dass die std::cout
davon automatisch irgendwie zu kümmern. Ist das möglich?
Sie sollten in Erwägung ziehen, Ihren eigenen 'std :: streambuf' für z. eine "std :: ostream" -konforme Logger-Klassenimplementierung, um dies zu erreichen. –
Ohne ein open-ended streambuf zu implementieren, das die Ausgabe ansammelt und bei jedem Flush einen Timestamp rackst, zögere ich vorsichtig zu sagen, dass dies auf eine andere Weise möglich ist. Die Iostream-Leute sind dafür bekannt, Kaninchen aus den seltsamsten Orten zu ziehen, also sag niemals nie, aber wenn ich weiß, was ich von ihnen weiß, sehe ich es wahrscheinlich nicht anders. – WhozCraig
In Anbetracht der Tatsache, dass Sie neu in C++ sind und die gegebenen Antworten auf ziemlich fortgeschrittene Manipulation des IO-Prozesses beruhen, werde ich Ihnen empfehlen, entweder die Antwort von Paul Evans zu verwenden oder aufzugeben. – elyashiv