Вы можете перенаправить любой поток в C ++ с помощью команды rdbuf (). Это немного запутанно для реализации, но не так сложно.
Вам нужно написать streambuf, который выводил бы в syslog при переполнении (), и заменить std :: cout rdbuf вашим streambuf.
Пример, который будет выводить в файл (без обработки ошибок, непроверенный код)
#include <iostream>
#include <fstream>
using namespace std;
int main (int argc, char** argv) {
streambuf * yourStreamBuffer = NULL;
ofstream outputFileStream;
outputFileStream.open ("theOutputFile.txt");
yourStreamBuffer = outputFileStream.rdbuf();
cout.rdbuf(yourStreamBuffer);
cout << "Ends up in the file, not std::cout!";
outputFileStream.close();
return 0;
}