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")