0

ここに関連する質問は、clog だけでこれを行う方法を示しています。

clog to tee を元の clog とログ ファイルに再定義する方法は?

問題は、同時に cerr に対してもこれを行う方法です。上記の質問では、cerr への出力は、それが必要なログ ファイルにも出力されません。

目標は、clog または cerr のいずれかに送られるものはすべて一度ログ ファイルに記録されるようにすることです。そのため、clog と cerr の両方を共有ログ ファイルに関連付ける必要があります。

4

1 に答える 1

1

このコードは、 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);
于 2010-12-25T23:02:55.827 に答える