10

自動ビルドからの出力へのロギングに問題があります。

ビルドは Makefile と makefile ユーティリティを使用して行われます。

問題は、コンパイラ コマンド ラインのような通常の出力が stdout に送られ、コンパイル エラーが stderr に送られることです。

画面に表示されるように、ビルドから出力を取得したいと考えています。次のようなものです:

(stdout) CC -c file.cpp
(stderr) Compile error at file.cpp line 232, blah blah blah
(stdout) CC -c file2.cpp

私が(kshスクリプトから)試したのは次のとおりです。

make -k > build.log 2> build.log

これにより単一のログ ファイルが作成されますが、ストリームがバッファリングされるため、ログ ファイルの結果がすべて混同されるという問題があります。

出力を 2 つの別々のログ ファイルにキャプチャすることはできましたが、それらを 1 つのログ ファイルにまとめる方法についての情報はありませんでした。

この場合、stdout と stderr のバッファリングをオフにする方法はありますか?

4

4 に答える 4

27
make -k > build.log 2>&1

これは、stderr と stdout を別々にリダイレクトするのではなく、stderr を stdout にリダイレクトするため、より適切に機能するはずです。これにより、バッファリングが同期されます。

コンソールに出力するだけでなく、ファイルにログを記録する場合は、次のようにします。

make -k 2>&1 | tee build.log
于 2009-02-17T19:11:31.513 に答える
5

これを試して

make -k > build.log 2>&1
于 2009-02-17T19:06:15.240 に答える
0

出力を 2 つの別々のログ ファイルにキャプチャすることはできましたが、それらを 1 つのログ ファイルにまとめる方法についての情報はありませんでした。

それらを接着して戻すのは難しいですが、それにも正しい答えがあり、うまくいきます! Vivek Gite による「標準出力と標準エラー出力を別のファイルに保存またはリダイレクトするにはどうすればよいですか? 」を参照してください。

于 2009-04-21T07:44:05.350 に答える
-2

setbuf(stdout,NULL); -> stdout バッファリングをオフにします

于 2009-05-06T06:44:02.657 に答える