0Pricing
C++ Academy · レッスン

std::cerrとstd::clogを扱う

cerrストリームとclogストリームを使って、診断情報やログをプログラムの出力から分離します。

「std::cerrとstd::clogを扱う」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。

3 つの出力ストリーム

標準ライブラリには、あらかじめ定義された 3 つの出力ストリームがあります。

  • std::cout — バッファー付き標準出力
  • std::cerr — バッファーなし標準エラー出力
  • std::clog — バッファー付き標準エラー出力

std::cerr:エラーと警告

std::cerr は stderr に書き込み、バッファリングされません。そのため、直後にプログラムがクラッシュしても、出力はすぐに表示されます。

std::cerr << "Error: file not found\n";

std::clog:バッファリングされたログ

std::clog も stderr に書き込みますが、cout と同様にバッファリングされます。多少の遅延が問題にならない通常のログに使用してください。

std::clog << "[info] processing record 42\n";

なぜ stderr には2つのストリームがあるのか

エラーは、クラッシュする前にユーザーが確認できるよう、すぐに表示する必要があります。ログは大量になるため、バッファリングして性能を許容範囲に保ちます。

出力のリダイレクト

コマンドラインでは、stdout と stderr は別々のチャネルに送られます。それぞれを個別にリダイレクトしてください。

# Send stdout to a file, stderr to the terminal
./app > out.txt

# Send stderr to a file too
./app 2> err.txt

# Send both to one file
./app > all.txt 2>&1

診断出力とデータ出力

慣例として、機械可読なデータは stdout に、人間向けの診断情報は stderr に出力します。これにより、パイプラインを適切に機能させられます。

ストリームを連結する

cin はデフォルトで cout に結び付けられています。cin から読み取ると、先に cout がフラッシュされます。cerr も同様に cout に結び付けられています。

レベル付きカスタムロギング

clog をヘルパー関数でラップし、INFO、WARN、ERROR などのログレベルを設けてください。これにより、ログメッセージを一貫させられます。

void warn(const std::string& msg) {
    std::clog << "[WARN] " << msg << "\n";
}

void error(const std::string& msg) {
    std::cerr << "[ERROR] " << msg << "\n";
}

パフォーマンス:cerr は遅い

cerr は操作のたびにフラッシュするため、繰り返し書き込むと遅くなります。大量のログには clog または専用のロギングライブラリを使用してください。

clog を手動でフラッシュする

デバッグのために clog の出力をすぐ表示したい場合は、手動でフラッシュしてください。

std::clog << "checkpoint" << std::flush;

ファイルストリームへの書き込み

同じパターンをファイルストリームにも使用できます。std::ofstream でログファイルを開き、clog と同じようにストリームへ書き込んでください。

std::ofstream logFile("app.log");
logFile << "Application started\n";

理解度チェック

書き込みのたびに自動的にフラッシュされる標準ストリームはどれですか?

まとめ

通常の出力には std::cout、緊急性の高いバッファリングされないエラーには std::cerr、バッファリングされるログには std::clog を使用します。シェルでは > と 2> を使って、それぞれを個別にリダイレクトしてください。

よくある質問

「std::cerrとstd::clogを扱う」レッスンは無料ですか?

はい。「std::cerrとstd::clogを扱う」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。

「std::cerrとstd::clogを扱う」で何を学びますか?

cerrストリームとclogストリームを使って、診断情報やログをプログラムの出力から分離します。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C++ Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「std::cerrとstd::clogを扱う」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC++ Academyレッスンでコードを書いて実行できますか?

はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. std::cinとstd::coutの適切な使い方
  2. iomanipによる出力の書式設定
  3. getlineで安全に入力を読み取る
  4. std::cerrとstd::clogを扱う
← C++ Academyに戻る