オススメのPythonログ出力 基本設定

とりあえず、最初はこの設定をしてコンソールにログ出力するのが、後々カテゴリ分けしたくなったり、ファイルに出力したくなったときにもなんとかなる。

import logging

# basicConfigでフォーマットとレベル指定
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s %(levelname)7s %(message)s")
# ロガーを必ず生成して使用(ロガー名は完全修飾名を使用)
log = logging.getLogger(__name__)

log.debug("debug message")
log.info("info message")
log.warning("warning")
log.error("error")
# 実行結果
2012-04-20 09:17:34,857 DEBUG   debug message
2012-04-20 09:17:34,857 INFO    info message
2012-04-20 09:17:34,858 WARNING warning message
2012-04-20 09:17:34,858 ERROR   error message

とりあえずファイルに出力したくなったらbasicConfigでfilenameを指定

logging.basicConfig(level=logging.DEBUG, filename="debug.log",
    format="%(asctime)s %(levelname)7s %(message)s")

設定ファイルに分けたくなったり、カテゴリ分けしたくなったらfileConfigを使用

logging.config.fileConfig("log.conf")

ロガーを生成せずに、logging.debugみたいにして出力していると、全部rootLoggerからの出力になってしまうのでカテゴリわけができなくなる。
モジュールの完全修飾名でロガー生成生成していれば、パッケージ毎に分けることが可能になる。

フォーマットの書式文字列については以下を参照。

LogRecord 属性※抜粋

属性名 フォーマット 説明
asctime %(asctime)s LogRecord が生成された時刻を人間が読める書式で表したもの。デフォルトでは “2003-07-08 16:49:45,896” 形式
(コンマ以降の数字は時刻のミリ秒部分) です。
filename %(filename)s pathname のファイル名部分。
funcName %(funcName)s ロギングの呼び出しを含む関数の名前。
levelname %(levelname)s メッセージのための文字のロギングレベル
('DEBUG', 'INFO', 'WARNING',
'ERROR', 'CRITICAL')。
lineno %(lineno)d ロギングの呼び出しが発せられたソース行番号
(利用できる場合のみ)。
module %(module)s モジュール (filename の名前部分)。
msecs %(msecs)d LogRecord が生成された時刻のミリ秒部分。
message %(message)s msg % args として求められた、ログメッセージ。 Formatter.format() が呼び出されたときに設定されます。
name %(name)s ロギングに使われたロガーの名前。
pathname %(pathname)s ロギングの呼び出しが発せられたファイルの完全なパス名 (利用できる場合のみ)。
process %(process)d プロセス ID (利用可能な場合のみ)。
thread %(thread)d スレッド ID (利用可能な場合のみ)。
threadName %(threadName)s スレッド名 (利用可能な場合のみ)。
関連記事:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)