ロガーは以下の属性とメソッドを持ちます。ロガーを直接インスタンス化 することはできず、常にモジュール関数 logging.getLogger(name) を介してインスタンス化するので注意してください。
lvl) |
「親ロガーに代行させる」という用語の意味は、もしロガーのレベルが NOTEST ならば、祖先ロガーの系列の中を NOTEST 以外のレベルの祖先を見つけるかルー トに到達するまで辿っていく、ということです。
もし NOTEST 以外のレベルの祖先が見つかったなら、その祖先のレベルが祖先 の探索を開始したロガーの実効レベルとして取り扱われ、ログイベントがどの ように処理されるかを決めるのに使われます。
ルートに到達した場合、ルートのレベルが NOTEST ならば全てのメッセージは 処理されます。そうでなければルートのレベルが実効レベルとして使われま す。
lvl) |
) |
msg[, *args[, **kwargs]]) |
キーワード引数 kwargs からは二つのキーワードが調べられます。 一つめは exc_info で、この値の評価値が偽でない場合、 例外情報をログメッセージに追加します。(sys.exc_info の返す形式の) 例外情報を表すタプルが与えられていれば、それを メッセージに使います。それ以外の場合には、sys.exc_info を呼び出して例外情報を取得します。
もう一つのキーワード引数は extra で、当該ログイベント用に作られた LogRecoed の __dict__ にユーザー定義属性を増やすのに使われる辞書を渡すのに 用いられます。これらの属性は好きなように使えます。たとえば、ログメッセージの一部に することもできます。以下の例を見てください:
FORMAT = "%(asctime)-15s %(clientip)s %(user)-8s %(message)s" logging.basicConfig(format=FORMAT) d = { 'clientip' : '192.168.0.1', 'user' : 'fbloggs' } logger = logging.getLogger("tcpserver") logger.warning("Protocol problem: %s", "connection reset", extra=d)
出力はこのようになります。
2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset
extra で渡される辞書のキーはロギングシステムで使われているものとぶつからない ようにしなければなりません。(どのキーがロギングシステムで使われているかについての 詳細は Formatter のドキュメントを参照してください。)
これらの属性をログメッセージに使うことにしたなら、少し注意が必要です。 上の例では、'clientip' と 'user' が LogRecord の属性辞書に含まれている ことを期待した書式化文字列で Formatter はセットアップされてい ます。これらの属性が欠けていると、書式化例外が発生してしまうためメッセー ジはログに残りません。したがってこの場合、常にこれらのキーがあ る extra 辞書を渡す必要があります。
このようなことは煩わしいかもしれませんが、この機能は限定された場面で使 われるように意図しているものなのです。たとえば同じコードがいくつものコ ンテキストで実行されるマルチスレッドのサーバで、興味のある条件が現れる のがそのコンテキストに依存している(上の例で言えば、リモートのクライアン ト IP アドレスや認証されたユーザ名など)、というような場合です。そういっ た場面では、それ用の Formatter が特定の Handler と共に 使われるというのはよくあることです。
バージョン 2.5 で 変更 された仕様: extra が追加されました
msg[, *args[, **kwargs]]) |
msg[, *args[, **kwargs]]) |
msg[, *args[, **kwargs]]) |
msg[, *args[, **kwargs]]) |
lvl, msg[, *args[, **kwargs]]) |
msg[, *args]) |
filt) |
filt) |
record) |
hdlr) |
hdlr) |
) |
record) |
name, lvl, fn, lno, msg, args, exc_info, func, extra) |
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。