カテゴリ: Flask 更新日: 2026/01/24

Flaskのログ出力と可観測性を完全解説!初心者でもわかるlogger(ロギング)の基本

Flaskでログを出力する基本の仕組みを学ぼう(loggingモジュール)
Flaskでログを出力する基本の仕組みを学ぼう(loggingモジュール)

先生と生徒の会話形式で理解しよう

生徒

「Flaskで作ったWebアプリが、たまに動かなくなるんです。でも、どこで何が起きたのかさっぱり分からなくて……。」

先生

「それは困りましたね。プログラムの内部で何が起きているかを記録する『ログ』という仕組みを導入してみましょう。Flaskには標準でログを出力する機能が備わっているんですよ。」

生徒

「ログって、日記みたいなものですか?どうやって使うのか教えてください!」

先生

「その通り、アプリの日記のようなものです!それでは、Flaskでのログの出し方を基礎から学んでいきましょう!」

1. ログ(Log)とロギング(Logging)とは?

1. ログ(Log)とロギング(Logging)とは?
1. ログ(Log)とロギング(Logging)とは?

プログラミングの世界では、プログラムが動いているときに出す「記録」のことをログ(Log)と呼びます。そして、その記録を取る行為や仕組みのことをロギング(Logging)と言います。

パソコンを初めて触る方にとって「記録」と言われてもピンとこないかもしれません。例えば、銀行の通帳をイメージしてみてください。いつ、誰が、いくらお金を出し入れしたかが一目で分かりますよね?Webアプリにおけるログも同じで、「いつ、誰がアクセスして、エラーが起きたかどうか」を後から確認するための大切な証拠になります。

ログがあれば、もしアプリが止まってしまっても、「あ、ここで計算を間違えたんだな」とか「このデータが足りなかったんだな」という原因(バグと言います)を突き止めることができるのです。

2. Flaskにおける標準ログ機能の仕組み

2. Flaskにおける標準ログ機能の仕組み
2. Flaskにおける標準ログ機能の仕組み

Pythonの人気WebフレームワークであるFlaskには、最初からログを出力するための道具が用意されています。これはPythonそのものに備わっているloggingというモジュール(便利な道具箱のようなもの)をベースにしています。

Flaskアプリを立ち上げると、実は自動的にapp.loggerという名前の記録係が作成されます。私たちはこの記録係にお願いするだけで、簡単に画面やファイルにメッセージを残すことができるのです。

難しい設定をしなくても、すぐに使い始められるのがFlaskの魅力の一つです。まずは、最もシンプルなログの出力方法をコードで見てみましょう。


from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    # app.loggerを使ってログを出力する
    app.logger.info('トップページにアクセスされました!')
    return 'こんにちは!ログを確認してみてね。'

if __name__ == '__main__':
    app.run(debug=True)

3. ログの重要度(ログレベル)を理解しよう

3. ログの重要度(ログレベル)を理解しよう
3. ログの重要度(ログレベル)を理解しよう

ログには「重要度」というランクがあります。これをログレベルと呼びます。何でもかんでも同じように記録すると、本当に大事な情報が埋もれてしまうからです。

主なログレベルは、低い順に以下のようになっています:

レベル名 意味 使いどころ
DEBUG(デバッグ) 細かい動作記録 開発中に詳しく調べたいとき
INFO(インフォ) 通常の動作記録 「ログインした」「ページを開いた」など
WARNING(警告) 注意が必要な状態 「設定が古いですよ」など
ERROR(エラー) 問題が発生した状態 「エラーで処理が止まった」とき
CRITICAL(致命的) 深刻な状態 「システム全体がダウンした」とき

例えば、普通の挨拶は「INFO」ですが、火事の知らせは「CRITICAL」といった使い分けをします。

4. 様々なレベルでログを出力するコード例

4. 様々なレベルでログを出力するコード例
4. 様々なレベルでログを出力するコード例

それでは、先ほどのレベルを使い分けた具体的な書き方を見てみましょう。それぞれのレベルに合わせてメソッド(命令)の名前が変わります。


from flask import Flask

app = Flask(__name__)

@app.route('/test-log')
def test_log():
    # 状況に合わせて使い分ける
    app.logger.debug('これはデバッグ用の細かい情報です')
    app.logger.info('これは通常の動作記録です')
    app.logger.warning('おっと、何か注意が必要かもしれません')
    app.logger.error('大変だ!エラーが発生しました')
    app.logger.critical('システムが非常に危険な状態です!')
    
    return '色々な種類のログを出力したよ!'

if __name__ == '__main__':
    app.run(debug=True)

このコードを実行してブラウザでアクセスすると、パソコンの黒い画面(コンソールやターミナルと言います)にメッセージが表示されます。これが「ログが出ている」状態です。


[INFO] in app: これは通常の動作記録です
[WARNING] in app: おっと、何か注意が必要かもしれません
[ERROR] in app: 大変だ!エラーが発生しました
[CRITICAL] in app: システムが非常に危険な状態です!

5. 可観測性(オブザーバビリティ)って何?

5. 可観測性(オブザーバビリティ)って何?
5. 可観測性(オブザーバビリティ)って何?

最近のWeb開発では可観測性(オブザーバビリティ)という言葉がよく使われます。少し難しい言葉ですが、簡単に言うと「外から見て、中がどうなっているか手に取るように分かる状態」のことです。

例えば、お医者さんが患者さんの顔色を見たり、体温を測ったり、聴診器で心音を聞いたりして健康状態を把握しますよね?アプリも同じで、ログや動作速度などのデータを集めることで、「今のアプリは健康かな?」「どこか調子が悪くないかな?」と診断できるようにしておくことが大切なのです。

ロギングは、この可観測性を高めるための第一歩となります。ログがしっかり残っていれば、何かトラブルが起きたときでも「暗闇を手探りで進む」のではなく、「ライトで照らしながら修理する」ことができるようになります。

6. ログをファイルに保存してみよう

6. ログをファイルに保存してみよう
6. ログをファイルに保存してみよう

これまでの例では、ログは画面に表示されるだけでした。しかし、アプリを24時間動かし続ける場合、画面をずっと見ているわけにはいきません。そこで、ログをファイルとして保存する方法が一般的です。

ファイルに保存しておけば、一晩中起きた出来事を翌朝ゆっくり確認することができます。Pythonのlogging設定を使って、Flaskのログをファイルに書き出す設定を追加してみましょう。


import logging
from flask import Flask

app = Flask(__name__)

# ログの設定を行う(ファイル名や記録するレベルを決める)
logging.basicConfig(filename='app.log', level=logging.DEBUG)

@app.route('/hello')
def hello():
    app.logger.info('ファイルへの書き込みテストです')
    return 'app.logというファイルを確認してみてね!'

if __name__ == '__main__':
    app.run()

このコードを実行すると、プログラムと同じフォルダに「app.log」という名前のテキストファイルができあがります。その中身を開くと、記録されたログがずらっと並んでいるはずです。

7. 初心者が気をつけるべきロギングのコツ

7. 初心者が気をつけるべきロギングのコツ
7. 初心者が気をつけるべきロギングのコツ

ログを出すときに、やってはいけないことがいくつかあります。特に「個人情報」の扱いです。パスワードやクレジットカード番号、住所などは、絶対にログに出力してはいけません。

ログファイルは管理者が見るものですが、万が一ファイルが盗まれたときに、大切な情報がそのまま書かれていると大変なことになります。「誰がアクセスしたか(ユーザーIDなど)」は記録しても良いですが、「秘密の情報」は書かない、というのが鉄則です。

また、何でもかんでもINFOレベルで出すと、ログファイルが巨大になりすぎてハードディスク(パソコンの記憶容量)を使い切ってしまうこともあります。意味のある情報を、適切なレベルで出す練習をしていきましょう。

8. 実際にエラーが起きた時のログの見方

8. 実際にエラーが起きた時のログの見方
8. 実際にエラーが起きた時のログの見方

実際にエラーが起きたとき、ログには「トレースバック(Traceback)」と呼ばれる情報が表示されます。これは、エラーが起きるまでのプログラムの実行ルートを逆戻りした記録です。

最初は暗号のように見えるかもしれませんが、一番下の行に「何が起きたか(ZeroDivisionError: division by zero など)」が書いてあり、その少し上に「どのファイルの何行目で起きたか」が書いてあります。そこを読み解くのが、プログラミング上達の近道です。


from flask import Flask

app = Flask(__name__)

@app.route('/error')
def cause_error():
    # 0で割り算をするとエラーが発生する
    try:
        result = 10 / 0
    except Exception as e:
        # エラーの内容をログに記録する
        app.logger.error(f'予期しないエラーが発生!: {e}')
        return 'ごめんなさい、エラーが起きました。'

if __name__ == '__main__':
    app.run(debug=True)

このように、try-except(トライ・エクセプト)という構文と組み合わせることで、エラーの内容を冷静にログに残しつつ、ユーザーには丁寧な案内を出すことができるようになります。これが、プロが作るWebアプリの基本なのです。

カテゴリの一覧へ
新着記事
New1
Django
Djangoモデル入門|初心者が最初に知るべきORMの基本操作
New2
Python
Pythonの特殊メソッド(__str__ / __repr__ / __eq__)を便利に使う方法をやさしく解説
New3
Python
Pythonのリストとは?基本の使い方と作成・操作のやり方をやさしく解説
New4
Flask
Flaskのログをファイルに保存する方法!初心者でもわかる設定手順を徹底解説
人気記事
No.1
Java&Spring記事人気No1
Django
Djangoプロジェクトのディレクトリ構造を完全解説!初心者でも迷わないフォルダの見方
No.2
Java&Spring記事人気No2
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.3
Java&Spring記事人気No3
Flask
FlaskアプリのSECRET_KEYの設定方法を完全ガイド!初心者でもわかるセキュリティ対策
No.4
Java&Spring記事人気No4
Python
Pythonで文字列を置換するには?replace()の使い方と正規表現の活用例
No.5
Java&Spring記事人気No5
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.6
Java&Spring記事人気No6
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
No.7
Java&Spring記事人気No7
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.8
Java&Spring記事人気No8
Python
Pythonでディレクトリ操作を完全解説!作成・削除・一覧取得の基本