6.29.2 基本的な使い方

logging パッケージには高い柔軟性があり、その設定にたじろぐ こともあるでしょう。そこでこの節では、 logging パッケージを 簡単に使う方法もあることを示します。

以下の最も単純な例では、コンソールにログを表示します:

import logging

logging.debug('A debug message')
logging.info('Some information')
logging.warning('A shot across the bows')

上のスクリプトを実行すると、以下のようなメッセージを目にするでしょう:

WARNING:root:A shot across the bows

ここではロガーを特定しなかったので、システムはルートロガーを使っています。 デバッグメッセージや情報メッセージは表示されませんが、これはデフォルトの ルートロガーが WARNING 以上の重要度を持つメッセージしか処理しないように 設定されているからです。 メッセージの書式もデフォルトの設定に従っています。出力先は sys.stderr で、これもデフォルトの設定です。 重要度レベルやメッセージの形式、ログの出力先は、以下の例のように簡単に 変更できます:

import logging

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)s %(message)s',
                    filename='/tmp/myapp.log',
                    filemode='w')
logging.debug('A debug message')
logging.info('Some information')
logging.warning('A shot across the bows')

ここでは、basicConfig() メソッドを使って、以下のような出力例 になる (そして/tmp/myapp.log に書き込まれる) ように、 デフォルト設定を変更しています:

2004-07-02 13:00:08,743 DEBUG A debug message
2004-07-02 13:00:08,743 INFO Some information
2004-07-02 13:00:08,743 WARNING A shot across the bows

今度は、重要度が DEBUG か、それ以上のメッセージが処理されました。 メッセージの形式も変更され、出力はコンソールではなく特定のファイル に書き出されました。

出力の書式化には、通常の Python 文字列に対する初期化を使います - 2.3.6 節を参照してください。書式化文字列は、 以下の指定子 (specifier) を常にとります。指定子の完全なリストに ついては Formatter のドキュメントを参照してください。

書式 説明
%(name)s ロガーの名前 (ログチャネル) の名前です。
%(levelname)s メッセージのログレベル ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL') です。
%(asctime)s LogRecord が生成された際の時刻を、 人間が読み取れる形式にしたものです。デフォルトでは、 ``2003-07-08 16:49:45,896'' のような形式 (コンマの後ろはミリ秒) です。
%(message)s ログメッセージです。

以下のように、追加のキーワードパラメタ datefmt を渡すと日付や時刻の 書式を変更できます:

import logging

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)-8s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S',
                    filename='/temp/myapp.log',
                    filemode='w')
logging.debug('A debug message')
logging.info('Some information')
logging.warning('A shot across the bows')

出力は以下のようになります:

Fri, 02 Jul 2004 13:06:18 DEBUG    A debug message
Fri, 02 Jul 2004 13:06:18 INFO     Some information
Fri, 02 Jul 2004 13:06:18 WARNING  A shot across the bows

日付を書式化する文字列は、strftime() の要求に従います - time モジュールを参照してください。

コンソールやファイルではなく、別個に作成しておいたファイル類似オブジェクト にログを出力したい場合には、basicConfig()stream キーワード引数で渡します。streamfilename の両方の引数を指定した場合、stream は無視されるので注意してください。

状況に応じて変化する情報ももちろんログ出力できます。以下のように、 単にメッセージを書式化文字列にして、その後ろに可変情報の引数を渡すだけです:

import logging

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)-8s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S',
                    filename='/temp/myapp.log',
                    filemode='w')
logging.error('Pack my box with %d dozen %s', 5, 'liquor jugs')

出力は以下のようになります:

Wed, 21 Jul 2004 15:35:16 ERROR    Pack my box with 5 dozen liquor jugs

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。