Найти в Дзене
Аналитика данных

Логирование в Data-аналитике

Если написать код который например будет по API выкачивать данные и оставить компьютер работать на несколько часов, то может произойти что-то непредвиденное. И чтобы потом разобраться что же пошло не так, нам помогут лог-файлы. # Импорт библиотеки логирование
import logging # Инициализация логера
logging.basicConfig(
level=logging.INFO, # Уровень логирования: INFO и выше
format='%(asctime)s - %(levelname)s - %(message)s', # Формат сообщения
filename='app.log', # Лог-файл
filemode='a', # Режим добавления логов в файл
datefmt='%Y-%m-%d %H:%M:%S,%f', # Формат даты и времени с миллисекундами
encoding='utf-8' # Кодировка файла
) Используются для фильтрации логов: сообщения с уровнем ниже установленного не будут записаны. Например если установить level=logging.DEBUG то все сообщения ниже будут записаны: logging.debug('Это отладочное сообщение') # Будет записано
logging.info('Это информационное сообщение') # Будет записано
logging.warning('Это предупреждение') # Будет записано
logging.er
Оглавление

Если написать код который например будет по API выкачивать данные и оставить компьютер работать на несколько часов, то может произойти что-то непредвиденное. И чтобы потом разобраться что же пошло не так, нам помогут лог-файлы.

# Импорт библиотеки логирование
import logging
# Инициализация логера
logging.basicConfig(
level=logging.INFO, # Уровень логирования: INFO и выше
format='%(asctime)s - %(levelname)s - %(message)s', # Формат сообщения
filename='app.log', # Лог-файл
filemode='a', # Режим добавления логов в файл
datefmt='%Y-%m-%d %H:%M:%S,%f', # Формат даты и времени с миллисекундами
encoding='utf-8' # Кодировка файла
)

Что делает каждая строка кода

level — уровень логирования

Используются для фильтрации логов: сообщения с уровнем ниже установленного не будут записаны.

Уровни

  • logging.NOTSET — значимость: 0. Уровень не установлен. Используется для наследования уровня от родительского логера.
  • logging.DEBUG — значимость: 10. Отладочные сообщения. Используются для диагностики и отладки.
  • logging.INFO — значимость: 20. Информационные сообщения. Указывают на нормальное выполнение программы.
  • logging.WARNING — значимость: 30. Предупреждения. Указывают на потенциальные проблемы, которые не мешают работе программы.
  • logging.ERROR — значимость: 40. Ошибки. Указывают на более серьёзные проблемы, которые мешают выполнению части программы.
  • logging.CRITICAL — значимость: 50. Критические ошибки. Указывают на серьёзные проблемы, которые могут привести к остановке программы.

Например если установить level=logging.DEBUG то все сообщения ниже будут записаны:

logging.debug('Это отладочное сообщение') # Будет записано
logging.info('Это информационное сообщение') # Будет записано
logging.warning('Это предупреждение') # Будет записано
logging.error('Это ошибка') # Будет записано
logging.critical('Это критическая ошибка') # Будет записано

Если установить level=logging.WARNING, то в лог попадут только сообщения уровня WARNING, ERROR и CRITICAL. Сообщения уровня DEBUG и INFO будут проигнорированы.

format — определяет, как будет выглядеть каждая запись в логах

Формат с выводом даты-времени, уровня логирования и сообщения

format='%(asctime)s - %(levelname)s - %(message)s'

Вывод: 2025-02-14 11:05:54 - INFO - Файл успешно загружен.

  • %(asctime)s: Время события.
  • %(levelname)s: Уровень логирования (INFO, DEBUG, ERROR и т.д.).
  • %(message)s: Сообщение, переданное в лог.

Формат с именем модуля и функции

format='%(asctime)s - %(levelname)s - %(module)s:%(funcName)s - %(message)s'

Вывод: 2025-02-14 11:05:54 - INFO - my_module:download_file - Файл успешно загружен.

  • %(module)s: Имя модуля, откуда был вызван лог.
  • %(funcName)s: Имя функции, откуда был вызван лог.

Формат с именем логера

format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'

Вывод: 2025-02-14 11:05:54 - my_logger - INFO - Файл успешно загружен.

  • %(name)s: Имя логера

Формат с номером строки

format='%(asctime)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s'

Вывод: 2025-02-14 11:05:54 - INFO - my_script.py:42 - Файл успешно загружен.

  • %(filename)s: Имя файла, откуда был вызван лог.
  • %(lineno)d: Номер строки в файле, откуда был вызван лог.

filename — имя файла для записи логов.

filemode — режим добавления логов в файл.

Возможные значения

  • 'a' Добавление (append) — новые логи добавляются в конец файла. Если файл не существует, он создается.
  • 'w' Перезапись (write) — файл перезаписывается с нуля при каждом запуске программы. Старые логи удаляются.
  • 'x' Исключительное создание (exclusive creation) — файл создается только если он не существует. Если файл уже существует, выдаётся ошибка.
  • 'b' Бинарный режим — используется вместе с другими режимами (например, 'ab' или 'wb'). Логи записываются в бинарном формате.

datefmt — формат даты который будет записываться для каждого события в логах

По умолчанию формат такой: '%Y-%m-%d %H:%M:%S,%f'.

  • %Y - год,
  • %m - месяц,
  • %d - день,
  • %H - часы,
  • %M - минуты,
  • %S - секунды,
  • %f - миллисекундамы.

encoding - кодировка лог-файла

Пример использования в python-коде

|try:
| response = requests.get(new_url)
| logging.info(f"Запрос к URL: {response.url}")
| if response.status_code == 200:
| return response.json()
| else:
| logging.error(f'Ошибка при получении данных: {response.status_code}')
| return None
|except Exception as e:
| logging.exception('Ошибка запроса к серверу')
| return None