Вам не хватает того факта, что а) конечным предком каждого регистратора является регистратор root (по умолчанию имеет уровень WARNING
) и b) что уровни как у регистраторов, так и у обработчиков есть.
Состояние документов :
Когда создается регистратор, для уровня устанавливается значение NOTSET (, в результате чего все сообщения будутобрабатывается, когда регистратор является корневым регистратором, или делегирование родительскому элементу, когда регистратор является некорневым регистратором ).
Итак, вы создаете регистратор и StreamHandler сих уровень по умолчанию NOTSET
.Ваш регистратор является неявным потомком регистратора root .Вы устанавливаете обработчик на уровень DEBUG
, но не logger , использующий этот обработчик.Поскольку уровень в вашем логгере все еще равен NOTSET
, когда происходит событие журнала, его цепочка предков пересекается ...
... до тех пор, пока один из предков с уровнем, отличным от NOTSET, не станетнайден или получен рут.
[...]
Если корень достигнут и имеет уровень NOTSET, то все сообщения будутобработанный.В противном случае уровень корня будет использоваться в качестве эффективного уровня .
Это означает, что вы сразу же окажетесь в логгере root , чтобы определить эффективный журналуровень;он установлен на WARNING
в соответствии с настройками root logger по умолчанию.Вы можете проверить это с помощью свойств parent
и level
и метода getEffectiveLevel
объекта logger
:
logThis = get_logger()
print(logThis.parent) # <RootLogger root (WARNING)>
print(logThis.level) # 0 (= NOTSET)
print(logThis.getEffectiveLevel()) # 30 (= WARNING) from root logger
Чтобы ваш регистратор мог обрабатывать сообщения на самом желаемом уровне и выше него.просто установите его на регистраторе с помощью logger.setLevel(level)
в функции get_logger
.