BUNSEN

個人的な学習ログ

logging.config.dictConfig()についてまとめる

概要

log出せ、指定の形式でだせ、ファイルに保存しろ、コンソールにも出力しろ。

logging.config.fileConfigにて対応しようと一所懸命に頑張ってみました。しかし、どうもFilterの設定はfileConfigでは不可能らしいのです。

ということでdictConfigについてまとめます。

Loggerの基本

過去記事こちらを参照してください

注意事項

※Filterに関する記述は別記事でまとめます。(量が多くなりそうだから)※

dictConfigは引数に辞書を取り、その内容をもとにLoggerへ設定を入れていきます。

引数に使用する辞書変数はその場で定義することも可能ですが、私が個人的に設定を別ファイルに置くことがきれいだと考えているので別ファイルに保存しています。

以降で使用している別ファイルのサンプルはJSON形式で書かれていますが、最終的に辞書型に変換することが可能な形式でしたらなんでも可能です。

dictConfig()使用方法

gist605edf7e84fc87286084ff6892f51685

dictConfig() 設定ファイル書式

以下の例では、これらの設定をしている

  • rootLogger
    • logFileHandler: Debug以上をファイルに書き出し
    • consoleHandler: Info以上を標準出力に書き出し

gist4252d26a4c244e84556ca2a1fd1287a0

内容的に以前の記事で書いたfileConfig()とさほど変わらないので差分だけ。

dict["version"]

現在指定できる値は1のみ。今後のバージョンアップ時の後方互換性確保のための項目。

dict["disable_existing_loggers"]

booleanで指定する。 dictConfig()実行時にすでに存在するLoggerと同名のLoggerを設定しようとした際の挙動を指定する。

  • True: 既存のLoggerと同名の新規Loggerを使用不可にする。
  • False: 既存のLoggerを上書きして新規Loggerとして使用可能にする。

dict["handlers"][**]["class"]

fileConfig()の際はStreamHandlerのようにクラス名のみでよかったがdictConfig()ではlogging.StreamHandlerのようにloggingから指定する必要がある。

dict["handlers"][**][xx]

class,formatter,level以外の要素について(Handlerクラスの初期化引数)

fileConfig()の際は、tuple形式であったため位置引数として渡していたが、dictConfig()ではtuple廃止に伴いすべてキーワード引数で渡す。(※class要素と同じ階層にいることに注意)

dict["handlers"][**]["stream"]

StreamHandlerクラスの初期化引数

この要素では値に外部オブジェクトを指定する必要があります。 外部オブジェクトをファイル経由で指定する際、入力されている値が文字リテラル、またはオブジェクトなのか判断するためext://を文字列の先頭に付加する。