とりあえず、最初はこの設定をしてコンソールにログ出力するのが、後々カテゴリ分けしたくなったり、ファイルに出力したくなったときにもなんとかなる。
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 | スレッド名 (利用可能な場合のみ)。 |