Оба регистратора И обработчики имеют настройку level
, а уровень по умолчанию для обработчиков 0
.Вам нужно установить уровень родительского обработчика - в вашем случае root_logger.handlers[0]
выше logging.DEBUG
, чтобы отфильтровать debug()
вызовы на foo_logger
:
root_logger.handlers[0].level = logging.WARN
foo_logger.debug("peekaboo") # should not be printed
Обратите внимание, что logging.basicConfig()
только делает очень упрощенную конфигурацию - в основном это означает, как начать работу с журналированием, для любой серьезной конфигурации, которую вы хотите вместо dictConfig
, которая позволяет вам указывать обработчики, форматеры, уровни и т. д. по своему усмотрению.Также обратите внимание, что на самом деле у регистратора есть список обработчиков (не один), и что несколько регистраторов могут использовать один и тот же обработчик, поэтому, кто регистрирует, что (и где) зависит от комбинации уровней регистраторов И обработчиков (и от регистратора *Опция 1012 * тоже).
В качестве практического примера, в моем текущем (django) проекте мы имеем (среди прочего) обработчик «console» (записывает в stdout, который gunicorn перенаправляет в свой собственный файл журнала), чейдля уровня установлено значение INFO, а обработчик «уведомлений» (отправляет уведомления по электронной почте) с уровнем, установленным на WARN, так что некоторые из наших регистраторов (для наиболее чувствительных частей) будут отправлять сообщения INFO и выше в журналы Gunicorn и отправлять сообщения WARN и выше в качестве уведомлений тоже.