1

ソースコードに情報項目と進行状況の出力が含まれている C++ プロジェクトで Google ロガー (glog) を使用しています。

std::cout << some_useful_stuff << "\n";

また、GLOG を使用して情報項目をログに記録できます。

LOG(INFO) << some_useful_stuff << "\n"; \\ gets echoed to stdout

コードベース全体ですべてのstd::coutステートメントを変更することはできません (サードパーティなどのサブリポジトリを使用していて、独自のログステートメントをそれらに追加できないため)、これにより if-else 構造を使用できなくなります (これはとにかく醜い、すべての単一の出力ステートメントをロジックでラップします)。

stdoutでは、出力を GLogに複製するにはどうすればよいでしょうか?

std::cout << some_useful_stuff << "\n"; \\ message also goes to LOG(INFO)

おそらく役に立つ: 実際には、これを同時に行う必要はありません。{CONSOLE, LOGS, BOTH} のような選択肢があると便利ですが、{CONSOLE, LOGS} の間のより単純な選択肢にも我慢できます。

また、経験豊富なプログラマーですが、C ++の初心者なので、これが非常に単純な場合。申し訳ありません - そして事前に感謝します!

4

1 に答える 1

0

glog についてはよくわかりませんが、通常は dup2 システム コールを使用して、あるファイル ハンドラの出力を別のファイル ハンドラにリダイレクトします。

たとえば、あなたの場合、すべての std::cout を glog で使用されるログ ファイルに書き込むには、次のようにします。

dup2(glog_file_handler,stdout);

これは、glog が書き込んでいるログ ファイルのファイルハンドルを取得できる場合に機能します。詳細については、 http://man7.org/linux/man-pages/man2/dup.2.htmlを参照してください。

お役に立てれば。

PSプログラムに複数のスレッド/プロセスが同じglogファイルに書き込む場合、およびglogがログファイルに同期書き込みを行う場合、これは機能しません

于 2016-12-15T14:31:51.950 に答える