Ошибка печати уровня на консоль является конфигурацией по умолчанию, поэтому main.py не настраивает ваш регистратор.
Это потому, что main.py настраивает регистратор с буквальным именем "__name__". Sub настраивает регистратор с именем "main.sub" (при условии базовой структуры пакета и вы выполняете main.py).
Исправление
Самое быстрое решение - обновить эту строку в main.py:
logger = logging.getLogger("main")
Звонки на logger main.sub будут всплывать на logger main и попадать в его обработчик.
Заберите
Возможно, вы все равно захотите использовать __name__ в main.py, потому что вы читали, что это хорошая практика. Это касается только модулей, вызываемых другими модулями. Вот что нужно иметь в виду:
Если вы запустите python main.py :
'__name__' in main.py is still the same
__name__ in main.py resolves to '__main__'
__name__ in sub.py resolves to 'main.sub'
Если вы запустите python sub.py :
'__name__' in main.py is still the same
__name__ in main.py resolves to 'main'
__name__ in sub.py resolves to '__main__'