Pythonのロギング/ローテート設定を複数モジュールで使いたい
Windows 10
Python 3.6
directory example
|-- main.py
|-- modules/
| |-- __init__.py
| `-- funcs.py
`-- log/
`-- root.log
複数モジュールからロギングする(main.pyからもfuncs.pyからもログを出したい)場合,
https://docs.python.jp/3/howto/logging.html#logging-from-multiple-modules
の通りに行えば,問題なくログ出力ができます.
しかしローテートの方法をカスタマイズする場合,main.pyに
https://docs.python.jp/3/howto/logging-cookbook.html#using-a-rotator-and-namer-to-customize-log-rotation-processing
のように記述し,ロガーにハンドラを与えたところ,main.pyからのログに対してはローテートのカスタマイズが適用されました.
このときfuncs.pyからのログに対しても同様のカスタマイズを適用したい場合,funcs.pyにはどのように記述すべきでしょうか(同じログファイル/log/root.log
に出力したい).
main.pyと全く同じように記述すると,PermissionError: [WinError 32]
となります.
+α
できればlogging.config.fileConfig(...)
で設定を読み込めると,もっとプログラムがスッキリすると思うのですが,ローテートのカスタマイズを適用したい場合はやりようがないですかね?
main.py
import logging
import modules.funcs
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
trh = logging.handlers.TimedRotatingFileHandler(...)
trh.rotator = rotator # rotatorは別途作成
logger.addHandler(trh)
logger.debug('rotate test')
funcs.py
import logging
logger = logging.getLogger()
# ここで何らかの設定/記述をする?
logger.debug('rotate test @funcs.py')