【備忘録】「ログ」を読んでアプリの状態を理解しよう!

プログラミング

Webアプリケーションを動かしていると、ターミナルにたくさんのメッセージが流れてきますよね。「これ、一体何?」と感じたことはありませんか? 今回は、そんな疑問を解決し、あなたのプログラムが今何をしているのかを教えてくれる「ログ」について、初心者にもわかりやすく解説します。

この記事でわかること(要点まとめ)

  • UvicornとFastAPIで組んだChatBotのログを分析!
  • ログ分析にlogging活用: Pythonのloggingモジュールを使い、細かくログを記録・管理。
  • ログは目的別に2種類:
    • アプリケーションログ: あなたが書いたプログラムが「何をしているか」を記録。
      • 日付で始まる行 (2025-06-18 ...): あなたのアプリケーション(loggingモジュール)が出力したログ。
    • サーバーログ: プログラムを動かしている「サーバーが何をしているか」を記録。
      • INFO: で始まる行: Uvicornサーバー自身が出力したログ。
  • ログレベルで重要度がわかる: INFO(情報)、WARNING(警告)、ERROR(エラー)などがあり、どれだけ重要な情報かが一目でわかる。
  • 「200 OK」は「成功!」のサイン: 通信が問題なく行われたことを示すHTTPステータスコード。失敗は4xx(クライアントエラー)や5xx(サーバーエラー)で始まる番号で表示。

プログラムの「声」を聞く!ログとは何か?

プログラムが動いているとき、まるで独り言のように色々なメッセージを出力しています。これが「ログ」です。ログは、電車の運転手さんがつける運転日誌のようなもので、「いつ、何が起こったか」を記録する大切なツールです。

なぜログが必要なの?

  1. 動作確認: プログラムがちゃんと動いているか、どこまで処理が進んだかを確認できます。
  2. 問題解決: エラーが起きたとき、いつ、どこで、何が原因だったのかをログから特定できます。
  3. 情報記録: ユーザーの操作や重要な処理結果など、後で振り返りたい情報を残しておけます。

あなたのプログラムのログ、実は2種類あった!

分析したチャットボットプログラムのUvicornサーバーの出力には、実は2種類のログが混在!!

1. アプリケーションログ(あなたのプログラムからの声)

これは、**あなたが書いたPythonコード(FastAPIアプリケーション)**が出力しているログです。loggingモジュールを使って設定されたフォーマットで表示されます。

特徴:

  • 日付と時刻の後にミリ秒(カンマ以下の数字)が表示され、その後に - INFO - が続く形式です。
  • メッセージ内容は、アプリケーションの内部的な処理に関わることが多いです。
    • 例: 2025-06-18 22:07:48,708 - INFO - OpenAI API response received successfully for chat ID: ... (OpenAIからの応答が無事届いたことを示しています。)
    • 例: 2025-06-18 22:39:13,993 - INFO - New chat created with ID: ... (新しいチャットが作成されたことを示しています。)
    • 例: 2025-06-18 22:39:22,274 - INFO - Sending messages to OpenAI (Chat ID: ...): [...] (OpenAIに送信した具体的なメッセージ内容を示しています。JSON形式で詳細な情報が記録されていますね。)

これらのログは、あなたのプログラムのlogging.info(), logging.error(), logging.warning() といった命令によって出力されています。

2. サーバーログ(Uvicornからの声)

これは、FastAPIアプリケーションを動かしているUvicornサーバー自身が出力しているログです。サーバーの起動・停止や、外部からのHTTPリクエストの処理状況を教えてくれます。

特徴:

  • タイムスタンプがなく、INFO: の後にスペースが入り、その後にサーバー関連のメッセージが続く形式です。
  • メッセージ内容は、サーバーの稼働状況や、外部との通信状況に関わることが多いです。
    • 例: INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) (サーバーが起動し、どのURLでアクセスできるかを示しています。)
    • 例: INFO: Application startup complete. (アプリケーションが正常に起動を完了したことを示しています。)
    • 例: INFO: 127.0.0.1:51667 - "POST /chat HTTP/1.1" 200 OK (IPアドレス127.0.0.1から/chatへのPOSTリクエストがあり、結果が200 OKだったことを示しています。)

「200 OK」って、プログラムが「うまくいったよ!」って言ってるサイン

ログの中に頻繁に出てくる 200 OK というメッセージは、特に重要なサインです。これは「HTTPステータスコード」というもので、サーバーがクライアント(あなたのブラウザや他のプログラム)からのリクエストに対して、「あなたの要求は問題なく処理できました!」と伝えているものです。

  • 例えば、あなたのプログラムがOpenAIにチャットの生成を依頼し、OpenAIのサーバーがその依頼を問題なく処理して返答をくれたら、その通信は 200 OK と記録されます。
  • また、ウェブブラウザからあなたのFastAPIアプリケーションにアクセスがあった際、サーバーが正常に応答を返せたら、その通信も 200 OK と記録されます。

これは、まるで「取引が成立しました!」というOKサインのようなもので、ログにこのメッセージがたくさん表示されているということは、あなたのプログラムが外部サービスやユーザーとのやり取りをスムーズに行えている証拠なのです。

もし 200 OK 以外の数字(例えば 404 Not Found500 Internal Server Error など)が表示された場合は、何かしらの問題が発生していることを意味します。4xx台はクライアント側の問題(例:指定されたページが見つからない)、5xx台はサーバー側の問題(例:サーバー内部でエラーが発生した)を示すことが多いです。


まとめ:ログを読み解き、プログラムを理解しよう

ログは、一見するとただの文字の羅列に見えるかもしれません。しかし、そこに記録されているメッセージ一つ一つが、あなたのプログラムが今何をしているのか、問題なく動いているのか、そしてどんなやり取りが行われたのかを教えてくれる貴重な情報源です。

今回ご紹介したログの種類の見分け方、そして「200 OK」のようなステータスコードの意味を理解することで、あなたはより深く自分のプログラムの動きを把握できるようになります。ぜひ、これらの知識を活かして、あなたの開発ライフをさらにスムーズにしてくださいね!

コメント

タイトルとURLをコピーしました