logging.getLogger("имя_логгера"). Каждый вызов с уникальным именем возвращает новый логгер или, если он уже существует, существующий. Это позволяет конфигурировать логирование для разных частей приложения независимо.
    Использование logging.getLogger() – это основной способ создания и получения экземпляров логгеров в Python.  Ключевая особенность заключается в том, что logging.getLogger(name) возвращает один и тот же экземпляр логгера, если вызвать его несколько раз с одним и тем же именем. Это позволяет организовывать иерархическую структуру логгеров и настраивать их независимо друг от друга.
  
    Вот как можно использовать logging.getLogger() для создания разных логгеров:
  
        Каждый вызов logging.getLogger() с уникальным именем создает (или возвращает существующий) логгер с этим именем. Имя логгера обычно отражает модуль или компонент, в котором он используется.
      
import logging
# Получаем логгер для модуля "module_a"
logger_a = logging.getLogger("module_a")
# Получаем логгер для модуля "module_b"
logger_b = logging.getLogger("module_b")
logger_a.setLevel(logging.DEBUG)
logger_b.setLevel(logging.INFO)
logger_a.debug("Сообщение от module_a (DEBUG)")
logger_a.info("Сообщение от module_a (INFO)")
logger_b.debug("Сообщение от module_b (DEBUG) - Не отобразится, т.к. уровень INFO")
logger_b.info("Сообщение от module_b (INFO)")
      
          В этом примере создаются два логгера: module_a и module_b.  Каждый логгер может иметь свой уровень логирования и обработчики. Важно, что повторный вызов logging.getLogger("module_a") вернет тот же самый объект логгера, созданный ранее.
      
        Имена логгеров могут образовывать иерархию, разделенную точками (.). Например, "myapp.module_a" является потомком логгера "myapp".  Настройки логгеров применяются ко всем его потомкам, если только они не переопределены на уровне потомка.
      
import logging
# Создаем корневой логгер "myapp"
logger_myapp = logging.getLogger("myapp")
logger_myapp.setLevel(logging.DEBUG)
# Создаем логгер "myapp.module_a"
logger_module_a = logging.getLogger("myapp.module_a")
# Создаем логгер "myapp.module_b"
logger_module_b = logging.getLogger("myapp.module_b")
# Добавляем обработчик для корневого логгера (вывод в консоль)
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger_myapp.addHandler(handler)
logger_myapp.debug("Сообщение от myapp")
logger_module_a.debug("Сообщение от myapp.module_a")  # Отобразится, т.к. унаследовал уровень DEBUG от myapp
logger_module_b.info("Сообщение от myapp.module_b")   # Отобразится, т.к. унаследовал уровень DEBUG от myapp, но сам выводит INFO
      
        В этом примере, если для logger_myapp установлен уровень логирования DEBUG, то по умолчанию этот уровень будет унаследован логгерами logger_module_a и logger_module_b.  Однако, каждый из дочерних логгеров может переопределить свои собственные уровни или обработчики, если это необходимо.
      
    Важно:  При использовании logging.getLogger() всегда следует указывать осмысленные имена для логгеров, отражающие структуру вашего приложения.  Часто, в качестве имени логгера используют __name__ текущего модуля.
  
import logging
# Получаем логгер с именем текущего модуля
logger = logging.getLogger(__name__)
logger.debug("Сообщение из модуля my_module")