Flaskのログ管理でよくあるミスと改善ポイントまとめ!可観測性を高める秘訣
生徒
「Flaskでアプリを作ってみたのですが、エラーが起きた時に原因が全然わからなくて困っています。ログを見ればいいんですよね?」
先生
「その通りです。でも、ただログを出せば良いわけではありません。実は初心者が陥りやすい『ログの落とし穴』があるんですよ。」
生徒
「落とし穴ですか?どんなことに気をつければ、後から困らない『良いログ』が作れるようになりますか?」
先生
「よくある失敗例と、それをどう改善すれば『可観測性』が高まるのか、具体的に解説していきましょう!」
1. ログレベルを正しく使い分けられていない
プログラミング未経験の方が最初にやってしまいがちなのが、すべての記録を「print文」で画面に出してしまうことです。しかし、Flaskなどのシステム開発では、情報の重要度に応じて「ログレベル」というラベルを付けるのが基本です。
ログレベルには主に「DEBUG(デバッグ:開発中の細かいメモ)」「INFO(インフォ:通常の動作記録)」「WARNING(ワーニング:注意が必要な出来事)」「ERROR(エラー:問題発生)」などがあります。これらをすべて同じ扱いにすると、本当に大切な「エラー発生」の通知が、大量の「普通の記録」に埋もれて見つからなくなってしまいます。改善ポイントは、情報の重要度を一度立ち止まって考え、適切なレベルで記録することです。
2. 標準のprint関数だけで満足してしまう
「画面に文字が出ればいいから、printを使えばいいや」と思うかもしれません。しかし、print関数はあくまで「その場しのぎ」の表示です。本格的なアプリ運用では、ログはファイルに保存したり、日付や時間を自動で付けたりする必要があります。
Flaskでは、標準で用意されている app.logger を使うのが正解です。これを使うだけで、何時何分にその記録が作られたのか、どのプログラムから出力されたのかといった「証拠」としての価値が格段に上がります。以下のコードで、正しい書き方の基本を見てみましょう。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
# print("アクセスがありました") ではなく logger を使う!
app.logger.info('トップページへのアクセスを正常に受け付けました')
return 'こんにちは!ログの勉強中です。'
if __name__ == '__main__':
app.run()
3. ログに必要な「文脈(コンテキスト)」が足りない
後からログを読み返して一番困るのが、「エラーが起きました」という一行だけの記録です。これでは、どのユーザーが、どの画面で、どんな入力をした時にエラーになったのかが全く分かりません。
このような「周囲の状況」のことを専門用語で「文脈(コンテキスト)」と呼びます。ログには必ず「誰が(ユーザーID)」「何をしようとしたか(URLや操作内容)」を含めるようにしましょう。改善のコツは、自分が未来の自分に宛てた「事件現場の報告書」を書いているつもりで、詳細を盛り込むことです。これにより、可観測性(システムの中身が手に取るようにわかる状態)が向上します。
4. 個人情報や機密情報をログに出してしまう
これはセキュリティ上の非常に大きなミスです。デバッグのために、ユーザーのパスワードやクレジットカード番号、住所などをそのままログに書き出してしまうことがあります。ログファイルは、サーバーの管理者が閲覧できる場所に保存されるため、そこに機密情報が載っていると、情報漏洩のリスクになります。
改善ポイントは、ログを出す前に「この情報は誰に見られても大丈夫か?」を確認することです。もし個人情報を出したい場合は、星伏せ(例:user_****)にするなどの工夫が必要です。以下のコードは、セキュリティを意識したログの例です。
from flask import Flask, request
app = Flask(__name__)
@app.route('/login', methods=['POST'])
def login():
username = request.form.get('username')
# パスワードを logger.info(password) と書くのは絶対にNG!
app.logger.info(f'ユーザー名: {username} がログインを試みています。')
return 'ログイン処理中...'
if __name__ == '__main__':
app.run()
5. ログの保存場所と「ローテーション」の無視
パソコンのハードディスクには容量の限界があります。ログをずっと一つのファイルに書き込み続けると、ファイルサイズが数ギガバイトという巨大なものになり、最終的にはパソコンが動かなくなってしまいます(これをディスクフルと呼びます)。
これを防ぐための改善策が「ログローテーション」です。これは、一定のサイズになったり、一日が過ぎたりしたときに、古いログファイルを別の名前に変えて保存し、新しいファイルを作り直す仕組みです。また、古いログを自動で削除する設定も大切です。Flask(Python)にはこれらを自動で行う RotatingFileHandler という便利な道具が備わっています。
6. エラーの「詳細な原因(スタックトレース)」を捨ててしまう
エラーが起きたとき、プログラムは「どのファイルの何行目で、どんな種類の間違いがあったか」という詳細な情報を持っています。これを「スタックトレース」と呼びます。初心者のミスで多いのは、せっかくのエラーを自分で捕まえて(catch)、短いメッセージだけをログに残して詳細を消してしまうことです。
これでは原因調査ができません。改善ポイントは、エラーの「生の情報」をそのままログに流し込む設定にすることです。Flaskの app.logger.error に exc_info=True というオプションを付けるだけで、魔法のように詳細なエラーレポートが記録されます。
from flask import Flask
import logging
app = Flask(__name__)
@app.route('/bug')
def trigger_error():
try:
# わざとエラー(0での割り算)を起こします
result = 1 / 0
except Exception as e:
# exc_info=True を付けることで、エラーの場所を詳しく記録できます
app.logger.error('計算中に予期せぬエラーが発生しました', exc_info=True)
return 'エラーを記録しました'
if __name__ == '__main__':
app.run()
7. 日時の形式がバラバラで検索できない
ログには必ず日時が入りますが、この書き方が「2026/01/12」だったり「Jan 12, 2026」だったりとバラバラだと、後で「昨日の夜10時のログだけ見たい」と思ったときに検索が非常に困難になります。
改善ポイントは、国際的な基準である「ISO 8601」形式(例:2026-01-12 21:00:00)に統一することです。また、複数の地域で使われるアプリなら、時間の基準(タイムゾーン)を「UTC(世界標準時)」にするか、どこかに明記する必要があります。これにより、ログが整然とした「データベース」のような役割を果たすようになります。
8. ログを「人間」のためだけに書いている
最後は少し高度な改善ポイントですが、とても重要です。多くの人は「今日は天気が良いです」のような自然な文章でログを書きます。しかし、最近は人間ではなく「機械(AIや分析ツール)」がログを読み取って、自動でグラフにしたり異常を検知したりすることが増えています。
そのため、文章の中にデータを埋め込むのではなく、「構造化ログ(JSON形式など)」として出力するのが現代的な改善ポイントです。例えば、「ユーザーAがログイン」ではなく、「{"user": "A", "action": "login"}」という形式で出すと、機械が瞬時に集計できるようになります。可観測性を高めるための大きな一歩です。
from flask import Flask
import json
app = Flask(__name__)
@app.route('/order')
def order():
# 構造化されたログの例(辞書形式で作ってJSONに変換)
log_data = {
"level": "INFO",
"event": "purchase",
"item_id": 999,
"amount": 1500
}
app.logger.info(json.dumps(log_data))
return '注文完了'
if __name__ == '__main__':
app.run()
9. 監視と通知のバランスを考えていない
ログを完璧に取っていても、誰もそれを見ていなければ意味がありません。逆に、ちょっとした注意(WARNING)が出るたびにメールやスマホに通知が飛んでくるようにすると、今度は通知がうるさすぎて無視するようになってしまいます(これをアラート疲れと呼びます)。
改善ポイントは、「すぐに対応が必要な重大なエラー(ERROR)」だけを通知し、それ以外は「後で確認するための記録(INFO)」として蓄積しておくという「切り分け」をしっかり行うことです。Flaskのログ設定を見直して、通知の重要度を整理することで、開発者の心の平穏とアプリの安全を両立させることができます。