Можно передать Ваш по каналу stdout
к syslog
с эти logger
команда:
ИМЯ
logger - a shell command interface to the syslog(3) system log module
ОПИСАНИЕ
Logger makes entries in the system log. It provides a shell command interface to the syslog(3) system log module.
РЕЗЮМЕ
logger [-isd] [-f file] [-p pri] [-t tag] [-u socket] [message ...]
, Если Вы не предоставляете сообщение на командной строке, она читает stdin
Попытайтесь обернуть выполнение двоичного файла с подходящим сценарием, который просто читает stdout и stderr, и отправьте любые данные, считанные от них при использовании syslog()
. Это должно работать без любых изменений кода в обернутом приложении и быть довольно легко.
Не уверенный, если существуют существующие сценарии для передачи по каналу в, но запись той, не должно быть твердым если нет.
Можно перенаправить любой поток в C++ через rdbuf () команда. Это является немного замысловатым для реализации, но не настолько трудно.
необходимо записать streambuf, который произвел бы к системному журналу на переполнении () и заменил бы станд.:: суд 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;
}