複数の Python モジュールがあり、それぞれに個別のログ構成ファイルがあります。私は Yaml を使用しているので、
log_config_dict=yaml.load(open(config_file1, 'r'))
logging.config.dictConfig(log_config_dict)
self.main_logger=logging.getLogger('Main_Logger')
別のモジュールでは、次のようなものがあります
log_config_dict=yaml.load(open(config_file2, 'r'))
logging.config.dictConfig(log_config_dict)
self.main_logger=logging.getLogger('Poller_Main_Logger')
2 つのロガーが別々のログ ファイルに書き込んでいます。次に、個別のモジュールごとのコードで、次のようにログを記録します-
self.main_logger.info(log_str)
ただし、これは期待どおりに機能していません。モジュール 1 からログを記録し、次にモジュール 2 から、さらにモジュール 1 からログを記録すると、ログ メッセージはモジュール 2 の宛先に書き込まれるか、まったく書き込まれません。
何が起こっているのですか?dictConfig 呼び出しを行うたびに、以前のロガーが無効になるという問題はありますか? これを回避する方法はありますか?
以下 - ログ構成ファイルの 1 つ
version: 1
formatters:
default_formatter:
format: '%(asctime)s : %(levelname)s : %(message)s'
datefmt: '%d-%b-%Y %H:%M:%S'
plain_formatter:
format: '%(message)s'
handlers:
console_default_handler:
class: logging.StreamHandler
level: INFO
formatter: default_formatter
stream: ext://sys.stdout
console_error_handler:
class: logging.StreamHandler
level: WARNING
formatter: default_formatter
stream: ext://sys.stderr
logfile_handler:
class: logging.FileHandler
filename: logger.txt
mode: a
formatter: default_formatter
level: DEBUG
errfile_handler:
class: logging.FileHandler
filename: error.txt
mode: a
formatter: default_formatter
level: WARNING
plain_handler:
class: logging.StreamHandler
level: DEBUG
formatter: plain_formatter
stream: ext://sys.stdout
loggers:
Poller_Main_Logger:
level: DEBUG
handlers: [console_default_handler,logfile_handler]
propagate: no
Plain_Logger:
level: DEBUG
handlers: [plain_handler]
propagate: no
Error_Logger:
level: WARNING
handlers: [errfile_handler,console_error_handler,logfile_handler]
propagate: no
root:
level: INFO
handlers: [console_default_handler]