Pythonで開発を進める上で、ログ機能はアプリケーションの動作確認やトラブルシューティングに欠かせない存在です。この記事では、Python標準のloggingモジュールを使ったログ出力の基本から、実際の現場で役立つ設定・活用方法までをわかりやすく解説します。
loggingモジュールは、アプリケーション内で発生した情報やエラーを記録・管理するための標準ライブラリです。ログの出力先やフォーマット、出力レベルを柔軟にカスタマイズできるため、開発・運用の現場で広く利用されています。
loggingモジュールには5つの主要なログレベルが用意されています。これらを適切に使い分けることで、必要な情報だけを効率的に記録できます。
ログレベル | 数値 | 主な用途 |
---|---|---|
DEBUG | 10 | 詳細なデバッグ情報 |
INFO | 20 | 通常の動作や進捗の記録 |
WARNING | 30 | 注意が必要な事象 |
ERROR | 40 | エラー発生時 |
CRITICAL | 50 | 致命的な障害やシステム停止レベル |
最小限のログ出力
import logging
logging.basicConfig(level=logging.INFO)
logging.info('情報メッセージ')
logging.warning('警告メッセージ')
デフォルトではWARNING以上のログのみが表示されるため、INFOを出力したい場合はlevelを指定します。
モジュールごとにロガーを使う
from logging import getLogger
logger = getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.debug('デバッグメッセージ')
getLogger(name)を使うことで、モジュール単位でログ管理ができ、複数モジュールの大規模開発にも対応できます。
ログの出力先や形式を柔軟に設定するには、ハンドラーとフォーマッターを活用します。
コンソールとファイル両方に出力する例
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# コンソール出力用ハンドラー
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.DEBUG)
# ファイル出力用ハンドラー
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.INFO)
# フォーマット設定
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
stream_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
# ハンドラーをロガーに追加
logger.addHandler(stream_handler)
logger.addHandler(file_handler)
logger.info('ファイルとコンソールに出力されます')
このように複数のハンドラーを設定することで、用途に応じたログ管理が可能です。
複雑な設定や環境ごとの切り替えには、YAMLやiniファイルでログ設定を一元管理できます。
version: 1
formatters:
simple:
format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
handlers:
console:
class: logging.StreamHandler
level: DEBUG
formatter: simple
stream: ext://sys.stdout
file:
class: logging.FileHandler
level: INFO
formatter: simple
filename: application.log
root:
level: DEBUG
handlers: [console, file]
この設定をlogging.config.dictConfig()で読み込むことで、柔軟なログ管理が実現できます。
Pythonでログを活用する際、ちょっとした工夫や気配りで運用がぐっと楽になります。
Pythonのloggingモジュールを活用すれば、アプリケーションの可視性や保守性が大きく向上します。ログレベル、ハンドラー、フォーマッターを上手に組み合わせて、プロジェクトや運用環境に合わせた最適なログ設計を目指してみてください。