CERRと詰まりの両方を両方のティーに再定義するには、共有ログファイルにどのように詰まりますか?

StackOverflow https://stackoverflow.com/questions/4530751

  •  13-10-2019
  •  | 
  •  

質問

ここでの関連する質問は、ちょうど詰まるだけでこれを行う方法を示しています:

元の詰まりとログファイルにティーに詰まりを再定義する方法は?

問題は、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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top