structlogを用いてJSON形式でログ出力を行うための設定
構造化ロギングを行うために広く利用されているstructlogを利用したログ出力設定についての、個人的なベストプラクティス。
項目を自由に追加して、ログ出力時に引数として渡すことも可能。
import json
import logging
from typing import Any
import structlog
def setup_logging():
"""structlogによるログ出力設定を行う."""
# Python標準のロギング設定
logging.basicConfig(level=logging.INFO)
# structlogの設定
structlog.configure(
processors=[
structlog.processors.TimeStamper(fmt="iso", utc=False),
structlog.stdlib.add_logger_name, # ロガー名を追加
structlog.stdlib.add_log_level, # ログレベルを追加
structlog.processors.format_exc_info, # 例外情報を追加
custom_json_renderer, # JSON形式のログを出力
],
logger_factory=structlog.stdlib.LoggerFactory(), # Python標準のロガーを使用
)
def custom_json_renderer(_, __, event_dict: dict[str, Any]) -> str:
"""JSON形式のログのKey名と順序を指定する.
Args:
event_dict (dict): ログの辞書.
Returns:
str: JSON形式のログ.
"""
ordered_event_dict = {
"timestamp": event_dict.get("timestamp", ""),
"level": event_dict.get("level", ""),
"logger": event_dict.get("logger", ""),
"message": event_dict.get("event", ""),
"exception": event_dict.get("exception", ""),
}
return json.dumps(ordered_event_dict, ensure_ascii=False)
import structlog
from logs import setup_logging
setup_logging()
logger: structlog.stdlib.BoundLogger = structlog.get_logger(__name__)
logger.info()
logger.warning()
logger.exception()
import structlog
logger: structlog.stdlib.BoundLogger = structlog.get_logger(__name__)
logger.info()
logger.warning()
logger.exception()

oddy
"チーバくんの目"のあたりで暮らす、フリーランスエンジニアのoddyです。 サイト名の"OJTHON"(オジソン)の由来は、わが家での私のあだ名とプログラミング言語Python(パイソン)のもじりです。 僕たち家族の思い出と記録、そして今の僕が考えることについて、何かしらの形にして残していきたいと思い、このOJTHON.dev HOME / BLOGを作りました。