LoginSignup
1
1

More than 5 years have passed since last update.

pythonの自作モジュールを含めたプログラムのロギングの制御について

Posted at

やりたいこと

  • プログラムのロギングをしたい
  • mainプログラムは自作のモジュールをインポートしている
  • ロギングの対象は、自分が作ったmainプログラムとモジュール
  • 引数などを活用して、ロギング対象に対するログをDEBUG、INFO、WARNINGなどのログレベルの制御をまとめて行いたい

調べたらすぐできるだろうと思ったが、思いのほか試行錯誤したのでメモ書き

たどり着いた実装

以下、要点。

  • mainでhandlerをセットし、出力制御を行う。
  • 各モジュールでは、loggerからログを出力し、handlerで制御を行う。
  • mainで、basicConfigによる設定を行うことで、読み込むモジュール全てのloggerを取り扱う。
  • basicConfigでログレベル(level)を制御すると、importしている全てのモジュールのloggerに反映されるので、Filterを併用する。
  • 自分がログ制御したいloggerのみ通すFilterを設定する。
main.py
import logging
from mylib.test


class MyLoggerFilter(logging.Filter):
    def filter(self, record):
        return (record.name == __name__) or record.name.startswith('mylib')


logger = logging.getLogger(__name__)
handler = logging.StreamHandler()
handler.addFilter(MyLoggerFilter())
logging.basicConfig(
    handlers=[handler],
    level=logging.DEBUG)
mylib.test.py
import logging
logger = logging.getLogger(__name__)

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1