logging. Настроить разные обработчики (handlers) и форматтеры (formatters) для вывода логов разного уровня (DEBUG, INFO, WARNING, ERROR, CRITICAL) в разные места (файл, консоль, внешняя система).  Каждому обработчику можно установить свой уровень логирования, например, в файл писать все логи начиная с INFO, а в консоль только ERROR и CRITICAL.  Также можно использовать разные форматтеры для разного представления сообщений.
Для логирования сообщений с различными уровнями важности в Python приложении можно использовать модуль logging, который предоставляет гибкий и мощный механизм для этой цели.  Вот как это можно сделать:
logging:
      В начале вашего скрипта импортируйте модуль:
import loggingСоздайте логгер и настройте его уровень логирования.  Уровень логирования определяет, какие сообщения будут записаны в лог.  Доступные уровни (по возрастанию важности): DEBUG, INFO, WARNING, ERROR, CRITICAL.
# Получаем логгер
logger = logging.getLogger(__name__)
# Устанавливаем уровень логирования.  Например, логируем все, что выше DEBUG.
logger.setLevel(logging.DEBUG)
Обработчик определяет, куда будут записываться логи. Наиболее распространенные варианты – файл или консоль. Можно использовать несколько обработчиков одновременно.
# Создаем обработчик для записи в файл
file_handler = logging.FileHandler('app.log')
# Создаем обработчик для вывода в консоль
stream_handler = logging.StreamHandler()
Форматировщик определяет, как будут выглядеть ваши логи. Вы можете указать формат времени, уровень логирования, имя модуля и само сообщение.
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)
Привязываем созданные обработчики к нашему логгеру.
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
Теперь вы можете использовать логгер для записи сообщений с разными уровнями важности:
logger.debug('Сообщение уровня DEBUG')
logger.info('Сообщение уровня INFO')
logger.warning('Сообщение уровня WARNING')
logger.error('Сообщение уровня ERROR')
logger.critical('Сообщение уровня CRITICAL')
Полный пример:
import logging
# Настройка логгера
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# Создание обработчика для записи в файл
file_handler = logging.FileHandler('app.log')
# Создание обработчика для вывода в консоль
stream_handler = logging.StreamHandler()
# Форматирование логов
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)
# Добавление обработчиков к логгеру
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
# Использование логгера
def divide(x, y):
    try:
        result = x / y
    except ZeroDivisionError:
        logger.exception("Деление на ноль!") # Логируем исключение
    else:
        logger.info(f"Результат деления {x} на {y}: {result}")
        return result
divide(10, 2)
divide(10, 0)
logger.debug('Это сообщение отладки')
logger.info('Это информационное сообщение')
logger.warning('Это предупреждающее сообщение')
logger.error('Это сообщение об ошибке')
logger.critical('Это критическое сообщение')Дополнительные возможности:
Таким образом, модуль logging предоставляет все необходимые инструменты для гибкого и эффективного логирования в Python приложениях.