【Python】printを卒業してloggingを使ってログ出力する
Pythonのloggingモジュールは、プログラムの実行中に発生する情報を記録するための強力なツールです。以下に、loggingモジュールの基本的な使い方から詳細な設定方法までを説明します。
1. 基本的な使い方
まず、loggingモジュールをインポートし、基本的なログメッセージを記録する方法を示します。
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug('デバッグメッセージ')
logging.info('情報メッセージ')
logging.warning('警告メッセージ')
logging.error('エラーメッセージ')
logging.critical('重大なエラーメッセージ')
basicConfig関数を使ってログの基本設定を行い、ログレベルを設定します。この例では、ログレベルをDEBUGに設定しています。
2. ログレベル
loggingモジュールには、以下の5つの標準ログレベルがあります。
DEBUG: 詳細な情報。通常、診断目的で使用される。
INFO: 一般的な情報。
WARNING: 注意が必要な状況。
ERROR: エラーが発生した状況。
CRITICAL: 重大なエラー。プログラムの実行が続行できない可能性がある。
3. ログの設定
ログの出力形式や出力先をカスタマイズするためには、basicConfig関数の引数を設定します。
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
handlers=[
logging.FileHandler('app.log'),
logging.StreamHandler()
]
)
上記の設定では、ログをファイル(app.log)とコンソールの両方に出力します。ログの形式や日時フォーマットも指定しています。
4. ロガーの使用
複数のモジュールでログを使用する場合、個別のロガーを作成して使用します。
logger = logging.getLogger(__name__)
logger.debug('デバッグメッセージ')
logger.info('情報メッセージ')
logger.warning('警告メッセージ')
logger.error('エラーメッセージ')
logger.critical('重大なエラーメッセージ')
getLogger関数を使って、モジュールごとに異なるロガーを作成できます。
5. ハンドラとフォーマッタ
より高度なログ設定を行うために、ハンドラとフォーマッタを使用します。
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# コンソールハンドラの作成
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# ファイルハンドラの作成
fh = logging.FileHandler('app.log')
fh.setLevel(logging.ERROR)
# フォーマッタの作成
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# ハンドラにフォーマッタを設定
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# ロガーにハンドラを追加
logger.addHandler(ch)
logger.addHandler(fh)
# ログメッセージの記録
logger.debug('デバッグメッセージ')
logger.info('情報メッセージ')
logger.warning('警告メッセージ')
logger.error('エラーメッセージ')
logger.critical('重大なエラーメッセージ')
この例では、コンソールとファイルの両方にログを出力しますが、ファイルにはERRORレベル以上のメッセージのみを記録します。
6. まとめ
loggingモジュールを使用することで、printステートメントよりも柔軟で強力なログ機能を提供できます。ログレベル、フォーマット、出力先を自由に設定でき、複数のモジュールで一貫したログ管理が可能です。以上の設定例を参考に、プロジェクトに適したログ設定を行ってください。
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?