はじめに
七尾百合子さん、お誕生日 98日目 おめでとうございます! nikkieです。
python-json-loggerというライブラリの軽め素振りです。
目次
- はじめに
- 目次
- その名を聞いていた python-json-logger
- JSONをサポートしたフォーマッタ!
- Quickstartを参考に、JSON形式のログ出力
- 終わりに
- 代案:structlogもある
その名を聞いていた python-json-logger
2月の PyCon mini Shizuoka 2024 continue で脳内インデックスに登録されていました1。
https://pypi.org/project/python-json-logger/
「PythonでJSON形式のログを出力したい」となって、知識が結び付きました!
JSONをサポートしたフォーマッタ!
フォーマッタは
LogRecord を、人間または外部のシステムが解釈可能な出力文字列に変換する責任を持ちます。
ref: https://docs.python.org/ja/3/library/logging.html#formatter-objects
logging モジュール構成要素を解説した分かりやすいスライドを参照して
- フォーマッタがログレコードを文字列に変換する
- ハンドラがフォーマッタを持つ
- ハンドラはログの出力先に責任を持つ
このような分担になっているので、ログをJSON形式の文字列にしたいならば、いじる箇所はフォーマッタとなります。
Quickstartを参考に、JSON形式のログ出力
以下の記事で扱ったHTTPXのロガーにJSONFormatterを設定します。
{"levelname": "INFO", "asctime": "2025-06-23 22:54:49", "name": "httpx", "message": "HTTP Request: GET https://peps.python.org/api/peps.json \"HTTP/1.1 200 OK\""}
ログ出力がJSON形式です!
従来のフォーマッタに渡すようにfmt引数で文字列を渡すと、その文字列に含まれるログレコードのフィールドを取り出して、JSON形式で出力してくれます。
ref: https://nhairs.github.io/python-json-logger/latest/quickstart/#required-fields
インターフェース揃ってる!
動作環境情報
過去記事のHTTPXは公開日から判断して 0.27.0 と思われますが、そこから今回の 0.28.1 の間に DEBUG ログの削除があったようです。
- 0.27.0 https://github.com/encode/httpx/blob/0.27.0/httpx/_config.py#L79-L86
- 0.28.1 https://github.com/encode/httpx/blob/0.28.1/httpx/_config.py
load_ssl_context()はなくなってますね
終わりに
存在を聞いていた python-json-logger を試して、ログ出力がJSON形式になることを確認しました。
今回はQuickstartの拾い読みですが、Cookbookも合わせて読むとスムーズに使い出せそうでした。
シンプル(=組合せ可能)なloggingモジュールの思想を汲む、小さな素敵ライブラリという印象です🤗
代案:structlogもある
PyCon mini Shizuokaでは設定が重厚と聞いていました。
積み動画アーカイブです