Как записывать ошибки в лог с помощью `logging.error()`?

Для записи ошибок в лог с помощью logging.error(), необходимо сначала настроить модуль logging. Простейший пример:
import logging

logging.basicConfig(level=logging.ERROR)

try:
  # Код, который может вызвать ошибку
  result = 1 / 0
except Exception as e:
  logging.error("Произошла ошибка деления на ноль: %s", e)
Здесь logging.basicConfig(level=logging.ERROR) устанавливает минимальный уровень логирования на ERROR. Затем, внутри блока try...except, в случае возникновения исключения, мы используем logging.error() для записи сообщения об ошибке в лог. "%s" % e или "%s", e форматирует сообщение, включая информацию об исключении. Важно настроить logging для указания места хранения логов (файл, консоль, и т.д.) и формата записи.

Для записи ошибок в лог с помощью logging.error(), сначала необходимо настроить модуль logging. Вот пример:


import logging

# Настройка логгера (минимальный уровень - ERROR, вывод в файл, формат сообщения)
logging.basicConfig(filename='error.log', level=logging.ERROR, 
                    format='%(asctime)s - %(levelname)s - %(message)s')

try:
  # Код, который может вызвать ошибку
  result = 10 / 0
except Exception as e:
  # Запись информации об ошибке в лог
  logging.error(f"Произошла ошибка: {e}", exc_info=True)  # exc_info=True включает трассировку стека
  # Альтернативный вариант:
  # logging.exception("Произошла ошибка!") # Этот метод автоматически захватывает информацию об исключении

print("Программа продолжает выполняться (если ошибка была обработана).")
  

Пояснения:

  • import logging: Импортирует модуль logging.
  • logging.basicConfig(...): Это самый простой способ настройки логгера.
    • filename='error.log': Указывает файл, в который будут записываться логи. Если его не указать, логи будут выводиться в консоль.
    • level=logging.ERROR: Устанавливает минимальный уровень логирования. Будут записываться только сообщения уровня ERROR, CRITICAL и выше. Другие уровни (DEBUG, INFO, WARNING) будут игнорироваться.
    • format='%(asctime)s - %(levelname)s - %(message)s': Определяет формат сообщения лога.
      • %(asctime)s: Время записи сообщения.
      • %(levelname)s: Уровень сообщения (ERROR, WARNING и т.д.).
      • %(message)s: Само сообщение.
  • logging.error(f"Произошла ошибка: {e}", exc_info=True): Записывает сообщение об ошибке в лог.
    • f"Произошла ошибка: {e}": Само сообщение об ошибке, включающее описание исключения.
    • exc_info=True: Важный параметр! Включает в лог полную трассировку стека, что очень полезно для отладки.
  • logging.exception("Произошла ошибка!"): Эквивалентно logging.error("Произошла ошибка!", exc_info=True). Он автоматически добавляет информацию об исключении в сообщение лога. Используйте этот метод внутри блока except.

Как это работает:

  1. При возникновении исключения в блоке try, оно перехватывается блоком except.
  2. В блоке except, logging.error() записывает информацию об ошибке в файл error.log (или в консоль, если файл не был указан в basicConfig).
  3. Параметр exc_info=True включает трассировку стека, что позволяет точно определить, где произошла ошибка.

Важно: Не забывайте правильно настраивать уровень логирования (level) в зависимости от ваших потребностей. Например, если вы хотите записывать также предупреждения, установите level=logging.WARNING.

Продвинутые темы (по желанию):

  • Логгеры с разными именами: Вы можете создавать несколько логгеров с разными именами и настройками для разных частей вашего приложения.
  • Обработчики (Handlers): Вместо записи в файл, вы можете использовать обработчики для отправки логов по электронной почте, в базу данных или в другие системы мониторинга.
  • Фильтры (Filters): Фильтры позволяют вам фильтровать логические сообщения на основе различных критериев (например, по уровню, по источнику и т.д.).
  • Использование YAML/JSON для конфигурации логгера: Это позволяет более гибко и удобно настраивать логирование, особенно для сложных приложений.
0