カテゴリ: Flask 更新日: 2026/02/04

FlaskでログをJSON形式で出力!メリットと設定方法を初心者向けに徹底解説

FlaskでログをJSON形式で出力するメリットと設定方法
FlaskでログをJSON形式で出力するメリットと設定方法

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

生徒

「先生、Flaskのログを見てみたのですが、普通の文章だと後から特定の情報を探すのが大変そうです。もっと整理された形で記録する方法はありませんか?」

先生

「その通りですね。実は、ログを『JSON(ジェイソン)』という形式で出力すると、コンピューターが内容を理解しやすくなり、検索や分析が劇的に楽になるんですよ。」

生徒

「JSON…ですか?何だか難しそうですが、私のような初心者でも設定できるでしょうか?」

先生

「大丈夫です!便利な道具(ライブラリ)を使えば、少しのコードを追加するだけで魔法のようにログが整列します。まずはその仕組みから見ていきましょう!」

1. ログをJSON形式で出すとはどういうこと?

1. ログをJSON形式で出すとはどういうこと?
1. ログをJSON形式で出すとはどういうこと?

プログラミングを始めたばかりの方が最初に目にするログは、人間が読むための「普通の文章」であることが多いです。これをテキスト形式と呼びます。しかし、アプリが成長してログが何万行にもなると、人間が目で追うのは不可能になります。

そこで登場するのがJSON(JavaScript Object Notation)です。JSONとは、データを「名前(ラベル)」と「値」のペアで整理する書き方のルールです。例えば、「今日は晴れ」と書く代わりに、「天気:晴れ」と書くようなイメージです。このように整理して記録することを構造化ログと呼び、現代のシステム開発では「可観測性(オブザーバビリティ)」を高めるために欠かせない技術となっています。

2. 普通のログとJSON形式のログを比較してみよう

2. 普通のログとJSON形式のログを比較してみよう
2. 普通のログとJSON形式のログを比較してみよう

実際にどれくらい見た目が違うのか、具体例で見てみましょう。通常のログは日記のようなものですが、JSON形式は整理整頓された「名簿」や「台帳」のようなものです。

【通常のテキスト形式】


2026-01-12 10:00:00 INFO in app: ユーザーAがログインしました

【JSON形式】


{"time": "2026-01-12 10:00:00", "level": "INFO", "message": "ユーザーAがログイン", "user_id": "A"}

JSON形式の方は、"time""message"といったラベルが付いています。これによって、後から「レベルがINFOのものだけ抜き出す」「メッセージの内容だけ検索する」といった操作がコンピューターで一瞬で行えるようになります。この「検索のしやすさ」こそが、JSONログ最大の魅力です。

3. なぜ初心者のうちからJSON形式を使うべきなの?

3. なぜ初心者のうちからJSON形式を使うべきなの?
3. なぜ初心者のうちからJSON形式を使うべきなの?

「自分一人でアプリを作っているうちは、普通の文章で十分じゃない?」と思うかもしれません。しかし、JSON形式には以下のようなメリットがあります。

  • ミスを防げる: データの形が決まっているため、情報の抜け漏れに気づきやすくなります。
  • 分析ツールと相性がいい: ログをグラフにしたり、エラーの回数を自動で集計したりする便利なツール(DatadogやCloudWatch Logsなど)は、JSON形式が大好きです。
  • 情報の追加が簡単: ログの中に「OSの種類」や「処理にかかった時間」など、新しい項目を増やしても全体の形が崩れません。

初心者の方こそ、早い段階でこの「構造化」の考え方に触れておくことで、将来的に大きなシステムを作る際の基礎体力が身につきます。

4. 【準備】python-json-loggerを導入しよう

4. 【準備】python-json-loggerを導入しよう
4. 【準備】python-json-loggerを導入しよう

PythonやFlaskには、標準でもログを出す機能がありますが、JSON形式にするには少し手間がかかります。そこで、専門の部品であるpython-json-loggerという拡張機能(ライブラリ)を使いましょう。

パソコンを初めて触る方でも、以下の魔法の言葉(コマンド)を「ターミナル」や「コマンドプロンプト」という黒い画面に入力するだけで準備が完了します。


pip install python-json-logger

「pip(ピップ)」は、新しい道具をインターネットから取ってきてインストールしてくれる、とても便利な執事のような存在です。これが終われば、準備万端です!

5. 【実践】FlaskでJSONログを出力する基本コード

5. 【実践】FlaskでJSONログを出力する基本コード
5. 【実践】FlaskでJSONログを出力する基本コード

それでは、実際にFlaskアプリでJSONログを出すための最小限の設定を書いてみましょう。ここでは「フォーマッター」という、ログの見た目を整える担当者に、JSONのルールを教える作業を行います。


from flask import Flask
import logging
from pythonjsonlogger import jsonlogger

app = Flask(__name__)

# ログの設定を行う
log_handler = logging.StreamHandler()
# どんな項目をJSONに含めるか指定する
formatter = jsonlogger.JsonFormatter('%(asctime)s %(levelname)s %(message)s')
log_handler.setFormatter(formatter)

# Flaskのログ担当者にこの設定を渡す
app.logger.addHandler(log_handler)
app.logger.setLevel(logging.INFO)

@app.route('/')
def index():
    app.logger.info("JSON形式のログテスト成功!")
    return "ログを確認してね"

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

6. 独自の情報をログに追加する方法

6. 独自の情報をログに追加する方法
6. 独自の情報をログに追加する方法

JSONログの真価は、自分で決めた自由な情報を追加できるところにあります。例えば、特定の「商品ID」や「注文番号」を一緒に記録したい場合です。普通の文章だとどこに書くか迷いますが、JSONなら新しいラベルを付けるだけです。


@app.route('/order/<int:order_id>')
def order(order_id):
    # extraという引数を使うことで、自由な項目をJSONに追加できます
    app.logger.info("注文を受け付けました", extra={'order_id': order_id, 'status': 'pending'})
    return f"注文番号 {order_id} を処理中..."

これを出力すると、{"order_id": 123, "status": "pending"} という風に、プログラミングコードで扱いやすい形で記録されます。後から「特定の注文番号のログだけ全部見せて」とコンピューターにお願いするのがとても簡単になりますね。

7. エラー発生時もJSONなら分かりやすい

7. エラー発生時もJSONなら分かりやすい
7. エラー発生時もJSONなら分かりやすい

アプリに不具合が起きたとき、ログがぐちゃぐちゃだとパニックになります。JSON形式なら、エラーの内容(種類)と、どこで起きたかという情報が整然と並びます。


@app.route('/error')
def cause_error():
    try:
        result = 1 / 0
    except Exception as e:
        # エラーの内容をJSONで詳しく記録する
        app.logger.error("エラーが発生しました", extra={'error_type': type(e).__name__, 'reason': str(e)})
    return "ごめんなさい、エラーです"

このようにしておけば、後で「どんなエラーが何回起きたか」をグラフにするのも簡単です。初心者にとって、エラーは怖いものですが、このように冷静に記録を取ることで、解決への道筋がはっきりと見えるようになります。

8. 運用で役立つ「ファイル保存」との組み合わせ

8. 運用で役立つ「ファイル保存」との組み合わせ
8. 運用で役立つ「ファイル保存」との組み合わせ

これまでは画面にログを出すだけでしたが、実際にはログをファイルとして保存しておくことが多いです。JSON形式でファイルに保存しておけば、あとでそのファイルを別の分析プログラムに読み込ませることもできます。


import logging
from logging.handlers import RotatingFileHandler

# ファイルに書き出す担当者を作る
file_handler = RotatingFileHandler('app_log.json', maxBytes=10000, backupCount=3)
file_formatter = jsonlogger.JsonFormatter('%(asctime)s %(levelname)s %(message)s')
file_handler.setFormatter(file_formatter)

# アプリに登録
app.logger.addHandler(file_handler)

RotatingFileHandler(ローテーティング・ファイルハンドラ)というのは、ログファイルが巨大になりすぎないように、古くなったら新しいファイルに切り替えてくれる、賢いお掃除係のような機能です。これで、あなたのアプリの記録は完璧に管理されます。

9. 設定が反映されないときのチェックポイント

9. 設定が反映されないときのチェックポイント
9. 設定が反映されないときのチェックポイント

もしログがJSONにならなかったり、エラーが出たりした場合は、以下の点を確認してみましょう。

  • スペルミス: JsonFormatter の大文字・小文字は正しく書けていますか?
  • インストール忘れ: 手順4の pip install は成功しましたか?
  • レベルの設定: app.logger.setLevel(logging.INFO) を忘れると、軽い通知(INFO)が出ないことがあります。
プログラミングでは、こうした小さな間違いが原因で動かないことがよくあります。でも大丈夫、ログがJSON形式になっていれば、その「動かない理由」もきっと見つけやすくなっているはずです!

カテゴリの一覧へ
新着記事
New1
Flask
Flaskで非同期フォーム送信(Ajax POST)を実装する方法を解説!初心者でもわかるステップ解説
New2
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
New3
Python
PythonでMySQLに接続する方法!pymysqlの基本的な使い方
New4
Flask
FlaskのURLルールとは?ルーティングの基本と動的URLの作り方を解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.3
Java&Spring記事人気No3
Python
Pythonでリストの要素を検索・取得する方法!index()やin演算子の活用法
No.4
Java&Spring記事人気No4
Python
Pythonプログラムの書き方を基礎から学ぼう!初心者が覚えるべき文法とは?
No.5
Java&Spring記事人気No5
Python
Pythonのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.6
Java&Spring記事人気No6
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.7
Java&Spring記事人気No7
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.8
Java&Spring記事人気No8
Flask
Flaskでクラウド上のメッセージキュー(SQS/PubSub)を扱う完全ガイド!初心者向け解説