ここに関連する質問は、clog だけでこれを行う方法を示しています。
clog to tee を元の clog とログ ファイルに再定義する方法は?
問題は、同時に cerr に対してもこれを行う方法です。上記の質問では、cerr への出力は、それが必要なログ ファイルにも出力されません。
目標は、clog または cerr のいずれかに送られるものはすべて一度ログ ファイルに記録されるようにすることです。そのため、clog と cerr の両方を共有ログ ファイルに関連付ける必要があります。
ここに関連する質問は、clog だけでこれを行う方法を示しています。
clog to tee を元の clog とログ ファイルに再定義する方法は?
問題は、同時に cerr に対してもこれを行う方法です。上記の質問では、cerr への出力は、それが必要なログ ファイルにも出力されません。
目標は、clog または cerr のいずれかに送られるものはすべて一度ログ ファイルに記録されるようにすることです。そのため、clog と cerr の両方を共有ログ ファイルに関連付ける必要があります。
このコードは、 std::cout と std::cerr の両方を出力ファイルにリダイレクトします。
// create an output stream
std::ofstream trace_log ( "/tmp/foo.log" );
// connect stream buffers
std::streambuf *coutbuf = std::cout.rdbuf();
std::cout.rdbuf(trace_log.rdbuf () );
std::streambuf *cerrbuf = std::cerr.rdbuf();
std::cerr.rdbuf(trace_log.rdbuf () );
// log
std::cout << "cout here" << std::endl;
std::cerr << "cerr here" << std::endl;
// restore
std::cout.flush ();
std::cout.rdbuf(cerrbuf);
std::cerr.flush ();
std::cerr.rdbuf(cerrbuf);