Так вы, судя по конфигу, именно этого и хотите. У вас по факту один логгер, который жрёт всё подряд и передает без разбора трем хендлерам.
Вы запутались в именах. Имя хендлера не фильтрует логи. Вы создаете именованные логгеры в коде, но по этим именам нигде не фильтруете.
Для сности и прозрачности рекомендую именовать хендлеры в конфиге с префиксом "handler_" или как-то так. Чтобы не было соблазно ошибиться в именах. Явное лучше неявного
Вам в конфиге нужно сделать три логера, каждый из которых будет фильтровать свои логи и отдавать своему хендлеру.
Да, похоже вы не правильно поняли суть хендлеров.
Фильтруют сообщения логгеры, хендлеры их обрабатывают.
В вашем случае достаточно было одного хендлера. Несколько нужны на случай, если бы вам помимо stdout некоторые логи нужно было бы отправлять по почте, некоторые особенным образом форматировать и пихать в отдельный файл (например важные ошибки), некоторые гасить и никуда не выводить, некоторые отправлять через телеграм-бота в чат.
LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '[%(asctime)s] %(levelname)s | %(name)s: %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S',
},
},
'handlers': {
'std': {
# 'level': 'INFO',
'formatter': 'standard',
'class': 'logging.StreamHandler',
'stream': 'ext://sys.stdout',
},
},
'loggers': {
'init': {
'level': 'DEBUG',
'handlers': ['std'],
'propagate': 1,
},
'parse': {
'level': 'DEBUG',
'handlers': ['std'],
'propagate': 1,
},
'getmail': {
'level': 'DEBUG',
'handlers': ['std'],
'propagate': 1,
},
},
}