Flaskのログをファイルに保存する方法!初心者でもわかる設定手順を徹底解説
生徒
「Flaskで作ったアプリの記録を、画面を消しても消えないようにファイルに残しておきたいのですが、どうすればいいですか?」
先生
「それなら『ファイル保存』の設定が必要です。Pythonの標準的な道具を使って、アプリが動いている間に起きたことをテキストファイルとして書き出すことができるんですよ。」
生徒
「ファイルとして残れば、後からゆっくり確認できますね!難しい設定が必要ですか?」
先生
「一見難しそうに見えますが、手順を追っていけば大丈夫です。初心者の方でも設定できるように、丁寧に解説していきますね!」
1. ログをファイルに保存するメリットとは?
アプリを動かしているとき、パソコンの黒い画面(コンソール)に流れる文字は、アプリを止めたり画面を閉じたりすると消えてしまいます。これでは、夜中にアプリに不具合が起きても、朝起きたときには何が起きたか分かりません。
そこで、ログをファイルに保存します。これは、アプリ専用の「日記帳」を作るようなものです。ファイルとして保存しておくことで、過去にどのようなエラーが起きたのか、どれくらいの人がアクセスしたのかを後から証拠として見返すことができます。プログラミング未経験の方にとって、まずは「証拠を残す」ことの重要性を知るのが第一歩です。これを専門用語で「永続化(えいぞくか)」と呼んだりしますが、今は「日記としてノートに残すこと」と覚えておけば十分です。
2. Pythonの「FileHandler」という仕組みを学ぼう
Flaskでログをファイルに書くためには、Pythonに用意されているloggingという道具箱の中にある、FileHandler(ファイルハンドラー)という機能を使います。ハンドラーとは、直訳すると「扱う人」や「係員」という意味です。つまり、FileHandlerは「ログの内容を受け取って、ファイルに書き込む担当係」のことです。
この係員に「どのファイルに書くか」「どのくらいの重要度の情報を書くか」を指示することで、自動的にファイルへの書き込みが行われるようになります。この仕組みを知っておくと、設定ファイルのコードが何を意味しているのかが理解しやすくなります。
3. 最もシンプルなログ保存の設定手順
まずは、一番簡単な設定から始めましょう。Flaskのアプリを立ち上げるときに、ログの設定を数行追加するだけでファイル保存が始まります。
import logging
from flask import Flask
app = Flask(__name__)
# ログの記録係(ハンドラー)を作成。app.logというファイルに書き込む。
file_handler = logging.FileHandler('app.log')
# Flaskのアプリにこの記録係を登録する
app.logger.addHandler(file_handler)
@app.route('/')
def index():
app.logger.info('ページが表示されました')
return 'ログをファイルに記録したよ!'
if __name__ == '__main__':
app.run()
このプログラムを実行してブラウザでアクセスすると、同じフォルダの中に「app.log」というファイルが自動で作られ、その中にメッセージが書き込まれます。もしファイルがなければ自動で作ってくれるので、パソコンに詳しくなくても安心してください。
4. ログの見た目(フォーマット)を整える方法
ただメッセージをファイルに書くだけでは、後で見返したときに「いつ起きたことか」が分かりません。そこで、Formatter(フォーマッター)という機能を使って、ログの見た目を整えます。
例えば、「2026年1月12日 10時00分 [情報] メッセージ」という形式で記録するように設定できます。これにより、エラーが起きた正確な時間を特定できるようになります。
import logging
from flask import Flask
app = Flask(__name__)
# ファイル保存の設定
handler = logging.FileHandler('formatted_app.log')
# ログの見た目を決める(時間 - レベル名 - メッセージ)
fmt = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(fmt)
app.logger.addHandler(handler)
app.logger.setLevel(logging.INFO)
@app.route('/visit')
def visit():
app.logger.info('訪問者が来ました!')
return 'きれいな形式でログを残しました。'
5. ログファイルが一杯にならないための工夫
ログをずっと保存し続けると、ファイルのサイズがどんどん大きくなって、最終的にはパソコンの容量を使い切ってしまうかもしれません。これを防ぐために、RotatingFileHandler(ローテーティング・ファイルハンドラー)という便利な機能があります。
これは、ファイルが一定のサイズになったら、自動的に古いファイルを「app.log.1」「app.log.2」のように名前を変えて保存し、新しいファイルを作り直してくれる機能です。まるで、ノートがいっぱいになったら新しいノートに切り替えて、古いノートを数冊だけ本棚に残しておくような仕組みです。
from logging.handlers import RotatingFileHandler
from flask import Flask
app = Flask(__name__)
# 最大10,000バイト(約10KB)で、古いファイルを3つまで残す設定
rotate_handler = RotatingFileHandler('myapp.log', maxBytes=10000, backupCount=3)
app.logger.addHandler(rotate_handler)
@app.route('/action')
def action():
app.logger.info('たくさんログを書いても安心です!')
return '自動でファイルが切り替わります。'
6. 日本語が文字化けしないための設定
パソコン初心者の方が最初につまずきやすいのが「文字化け」です。ログに日本語を書くと、ファイルを開いたときに「???」や変な記号になってしまうことがあります。これを防ぐには、文字コード(encoding)を指定する必要があります。
今の時代の標準は「UTF-8」という文字コードです。設定の際に、この名前を教えてあげるだけで、日本語も正しくきれいに保存されるようになります。
import logging
from flask import Flask
app = Flask(__name__)
# encoding='utf-8' を入れるのがポイント!
jp_handler = logging.FileHandler('japanese.log', encoding='utf-8')
jp_handler.setFormatter(logging.Formatter('%(message)s'))
app.logger.addHandler(jp_handler)
@app.route('/hello')
def hello():
app.logger.info('こんにちは!日本語のログです。')
return '文字化けせずに保存できたかな?'
7. ログレベルを正しく使い分けるコツ
ファイルに全ての情報を書き込むと、後で読むのが大変になります。そこで、ログレベルを活用します。通常は「INFO」以上の重要なことだけをファイルに書き、開発中の細かい確認(DEBUG)は画面だけに表示する、といった使い分けが理想です。
例えば、重大なエラー(ERROR)だけを別の「error.log」というファイルに書き出すように設定することも可能です。これにより、緊急事態が起きたときに、どのファイルを見ればいいかすぐに判断できるようになります。
8. ログ設定をプログラムのどこに書くべきか
ログの設定は、必ず「Flaskのアプリ(app)を作った直後」かつ「サーバーを動かす(run)前」に書くようにしましょう。アプリが動き出してから設定しても、最初の方の動きが記録されないからです。
また、大きなプロジェクトでは設定を別のファイルに分けることもありますが、初心者のうちは、メインのプログラムファイルの最初の方にまとめて書いておくのが一番分かりやすくて間違いがありません。このように、書く場所を意識することも、プログラミングでは大切なルールの一つです。
9. 実際に保存されたログファイルを確認する方法
プログラムを実行して、いくつかページにアクセスしたら、作成されたファイルを確認してみましょう。Windowsなら「メモ帳」、Macなら「テキストエディット」で開くことができます。
中身を見て、自分が書いた通りのメッセージや時間が記録されていれば成功です!もしファイルが見当たらない場合は、プログラムを実行している場所(フォルダ)をもう一度確認してみてください。ログ管理ができるようになると、あなたのアプリの信頼性はぐんと高まります。一歩ずつ、可観測性の高いアプリ作りを目指していきましょう。