14.5.6 Formatter オブジェクト

Formatter は以下の属性とメソッドを持っています。 FormatterLogRecord を (通常は) 人間か外部のシステム で解釈できる文字列に変換する役割を担っています。基底クラスの Formatter では書式化文字列を指定することができます。 何も指定されなかった場合、'%(message)s' の値が使われます。

Formatter は書式化文字列とともに初期化され、LogRecord 属性に 入っている知識を利用できるようにします - 上で触れたデフォルトの 値では、ユーザによるメッセージと引数はあらかじめ書式化されて、 LogRecordmessage 属性に入っていることを利用 しているようにです。 この書式化文字列は、Python 標準の % を使った変換文字列で構成されます。文字列整形に関する詳細は 3.6.2 ``String Formatting Operations'' の章を参照してください。

現状では、 LogRecord の有用な属性は以下のようになっています:

Format Description
%(name)s ロガー (ログ記録チャネル) の名前
%(levelno)s メッセージのログ記録レベルを表す数字 (DEBUG, INFO, WARNING, ERROR, CRITICAL)
%(levelname)s メッセージのログ記録レベルを表す文字列 ("DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL")
%(pathname)s ログ記録の呼び出しが行われたソースファイルの 全パス名 (取得できる場合)
%(filename)s パス名中のファイル名部分
%(module)s モジュール名 (ファイル名の名前部分)
%(funcName)s ログ記録の呼び出しを含む関数の名前
%(lineno)d ログ記録の呼び出しが行われたソース行番号 (取得できる場合)
%(created)f LogRecord が生成された時刻 (time.time() の返した値)
%(asctime)s LogRecord が生成された時刻を人間が読める書式で 表したもの。 デフォルトでは ``2003-07-08 16:49:45,896'' 形式 (コンマ以降の数字は時刻のミリ秒部分) です
%(msecs)d LogRecord が生成された時刻の、ミリ秒部分
%(thread)d スレッド ID (取得できる場合)
%(threadName)s スレッド名 (取得できる場合)
%(process)d プロセス ID (取得できる場合)
%(message)s レコードが発信された際に処理された msg % args の結果

バージョン 2.5 で 変更 された仕様: funcName が追加されました

クラス Formatter( [fmt[, datefmt]])
Formatter クラスの新たなインスタンスを返します。インスタンスは 全体としてのメッセージに対する書式化文字列と、メッセージの 日付/時刻部分のための書式化文字列を伴って初期化されます。fmt が指定されない場合、 '%(message)s' が使われます。 datefmt が指定されない場合、ISO8601 日付書式が使われます。

format( record)
レコードの属性辞書が、文字列を書式化する演算で被演算子として 使われます。書式化された結果の文字列を返します。 辞書を書式化する前に、二つの準備段階を経ます。 レコードの message 属性が msg % args を使って 処理されます。書式化された文字列が '(asctime)' を含む なら、 formatTime() が呼び出され、イベントの発生時刻を 書式化します。例外情報が存在する場合、formatException() を使って書式化され、メッセージに追加されます。

formatTime( record[, datefmt])
このメソッドは、フォーマッタが書式化された時間を利用したい際に、 format() から呼び出されます。このメソッドは特定の要求を 提供するためにフォーマッタで上書きすることができますが、基本的な 振る舞いは以下のようになります: datefmt (文字列) が指定された 場合、レコードが生成された時刻を書式化するために time.strftime() で使われます。そうでない場合、 ISO8601 書式が使われます。結果の文字列が返されます。

formatException( exc_info)
指定された例外情報 (sys.exc_info() が返すような 標準例外のタプル) を文字列として書式化します。 デフォルトの実装は単に traceback.print_exception() を使います。結果の文字列が返されます。

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