2016-06-26 6 views
1

logging.Loggerで提供されるAPIを使用してロガーを設定すると、b.pyのように既存のロガーが設定されます。 logging.config.dictConfig()でログを構成しても、既存のロガーはa.pyのように構成されません。logging.config.dictConfig()が既存のロガーに影響を与えない点は何ですか?

*.pyファイル

~/bar                      
▶ tail -n +1 *.py 
==> a.py <== 
import logging 
from logging.config import dictConfig 

logger = logging.getLogger(__name__) 

logging_config = dict(
    version = 1, 
    handlers = { 
     'h': {'class': 'logging.StreamHandler'} 
    }, 
    root = { 
     'handlers': ['h'], 
     'level': logging.DEBUG 
    } 
) 

dictConfig(logging_config) 

logger.debug("This is a test") 

==> b.py <== 
import logging 

logger = logging.getLogger(__name__) 

logging.getLogger().setLevel(logging.DEBUG) 
logging.getLogger().addHandler(logging.StreamHandler()) 

logger.debug("This is a test") 

I/O

~/bar                      
▶ python -m a 

~/bar                      
▶ python -m b 
This is a test 

ライブラリがlogging.config.dictConfig()前ロガーが設定されて作成した場合、ロガーが適切に設定されることはありません。ライブラリはこれをどのように扱いますか?彼らはロギング設定がそれらに渡されることを期待していますか?インポート中にロガーを作成しないでください。

答えて

1

logging.config.dictConfig()は、既存のロガーの設定に影響します。ただし、dictConfig()に渡された辞書にdisable_existing_loggers = Falseが定義されていない限り、デフォルトではdictConfig()は既存のロガーを無効にします。16.7.2.1. Dictionary Schema Details

関連する問題