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 キーワード引数で渡します。stream とfilename の両方の引数を指定した場合、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
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。