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 приложениях.