Pythonのロガーの設定をどうすればいいのか。
ログ出力のための print と import logging はやめてほしい
を元に模索してみた。
今使っている設定
すべてのファイルの先頭にはこれだけ書いておく。
いわばログ入力の設定。
これとは別に、ログ出力の設定を一か所だけ記述する。
メインの始まるところがいいんでないか。
他のライブラリをimportするより前に書きたいということもあるだろうからその辺はお好みで。
以上で、デフォルトのログ設定を使ってログが画面に出力される。
デフォルトのログ設定とは
上記のプログラムでは以下のようにログが流れる。
pythonのロガーは木構造
getLogger(__name__)
で得たロガーは __name__
という名前になり、''
という名のロガーが親になる。
というように ''
ロガーはルートロガーである。
どういう基準で親子が決まるかというと名前ベースで ''
がすべての親、その子 'hoge'
、さらにその子 'hoge.fuga'
というように .
をセパレータとしたパス名で決めているぽい。 getLogger(__name__)
という風にロガーを得れば、とりあえず getLogger('')
の子孫になる。
15.7. logging — Logging facility for Python — Python 2.7.18 documentation
https://docs.python.org/2/library/logging.html#logger-objects
さらにログは木構造を親に向かって遡りながら、通り道にあったhandlerに出力される。
なのですべての親になるルートロガーにひとつだけhandlerをセットしておけばよい。
ルートロガーにはデフォルトでStreamHandlerがセットされている
親に向かって流すかどうかを設定するには以下のようにする。
親に流さない
前知識としてこれくらいあればカスタマイズできる。
出力のカスタマイズ
基本的に、ルートロガーに好みのフォーマットやハンドラを設定することになると思う。
デフォルトのStreamHandlerを削除する
サーバー風の時刻付きのフォーマットとか。
デフォルトのハンドラを得る
もしくは自前で作る
使える変数は、LogRecord attributesらしい。
15.7. logging — Logging facility for Python — Python 2.7.18 documentation
https://docs.python.org/2/library/logging.html#logrecord-attributes
日付のカスタマイズは?
色付きにしよう
おされなコンソール
Pythonで色つきログを - rainbow_logging_handler をPyPIにリリースしました
QtのWidgetに出力する
StackOverflowとかで見つけた気がするがとりあえず。
gpibcs/qplaintexteditlogger.py at master · buha/gpibcs
A graphical GPIB command sequencer. Contribute to buha/gpibcs development by creating an account on GitHub.
https://github.com/buha/gpibcs/blob/master/qplaintexteditlogger.py
ログレベル別に色を付けてみる