web-dev-qa-db-ja.com

メッセージをstderrまたはstdoutに記録する必要がありますか?

カスタムログ機能(診断、通知、警告、エラーなど)を作成したいプログラムを作成しています。

これを行うには、stdoutまたはstderrストリームを使用する必要がありますか?これは一種のインタプリタであり、ユーザーは出力を印刷するように要求できます。

編集:ログフレームワークの推奨をやめてください:(

58
user193476

通常の出力(プログラムを実行した実際の結果)はstdoutに表示されます。これは、stderrに記載されているようなもの(診断、通知、警告、エラーなど)です。

「通常の出力」がない場合は、どちらを選択してもかまいません。ロギングが唯一の出力であると主張することができるので、それはstdoutに行く必要があります。または、stderrに移動する必要があるのはまだ「例外的な情報」であると主張することもできます。

38
Jakob

stdoutに何か他のものを書きますか?答えがYesの場合、stdoutからのリダイレクトに使用されたファイルの途中で通常のフローとエラーを区別するのは非常に困難です。

stdoutが別のプログラムの入力として使用される場合はどうなりますか?このデバッグ情報を解析できますか?この場合、重大なエラーのみをstderrに書き込むとよいでしょう。他の何かを書く必要がある場合は、追加のログファイルに書き込むことを検討してください。

12
Andrey Taptunov