CERRと詰まりの両方を両方のティーに再定義するには、共有ログファイルにどのように詰まりますか?
質問
ここでの関連する質問は、ちょうど詰まるだけでこれを行う方法を示しています:
元の詰まりとログファイルにティーに詰まりを再定義する方法は?
問題は、CERRに対して同時にこれを行う方法です。上記の質問を使用すると、CERRへの出力は、必要なログファイルにも表示されません。
目標は、詰まりやCerrのいずれかに行くものは何でも、ログファイルに1回表示されるため、詰まりと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);
所属していません StackOverflow