## 6 Formatter オブジェクト

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

Formatter は書式化文字列とともに初期化され、`LogRecord` 属性に 入っている知識を利用できるようにします - 上で触れたデフォルトの 値では、ユーザによるメッセージと引数はあらかじめ書式化されて、 `LogRecord` の message 属性に入っていることを利用 しているようにです。 この書式化文字列は、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()` を使います。結果の文字列が返されます。