2017-09-23 4 views
0

Kann jemand ein einfaches Beispiel für die Erstellung eines benutzerdefinierten Cout geben, möchte ich MyCout-Klasse auf der Konsole drucken und gleichzeitig String an Syslog senden.Wie Cout senden an Konsole und Syslog gleichzeitig

MyCout myCout 

myCout << "Test" << endl; 

Ich brauche Konsolenausgabe "Test" und "Test" an syslog gesendet.

+7

Es ist nicht einfach. Oft haben wir uns dafür entschieden, die Ausgabe in einem 'stringstream' zu erstellen und dann das Endergebnis sowohl nach' cout' als auch nach 'syslog' auszugeben. –

+0

FYI: Sie können normalerweise nicht * garantieren * Ausgabe an stdout gesendet wird an die * Konsole * gesendet. Benutzer können die Ausgabe beliebig umleiten. Wenn Sie auf der Konsole * bestehen wollen, müssen Sie direkt in das tty schreiben (vorausgesetzt, der Prozess hat tatsächlich einen). Wahrscheinlich so etwas wie die Verwendung der Curses-Bibliothek. –

Antwort

-1

Trivial-Lösung (funktioniert nur mit C-Strings):

#include <iostream> 
using namespace std; 

void syslog(const char* msg) { 
    std::cout << "syslog " << msg; 
} 

struct MyCout { 
    void operator<< (const char* rhs) { 
     std::cout << rhs << "\n"; 
     syslog(rhs); 
    } 
}; 

int main() { 
    MyCout myCout; 

    myCout << "Test"; 
    return 0; 
} 

Es bekommen ist viel komplizierter, wenn Sie die Ausgabe unterschiedliche oder benutzerdefinierte Typen wan't.

Verwandte Themen