Выбор ответа Middle Стандартная библиотека обновлено

Форматирование сообщений logging

Вопрос

Почему в логировании пишут logger.debug("user %s", user_id), а не logger.debug(f"user {user_id}")?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Форматирование ленивое, а шаблон помогает группировать. С %s и аргументами форматирование выполняется лениво: если уровень DEBUG выключен, строка не строится, а дорогой repr объекта не вычисляется.

Варианты ответа

  1. Форматирование ленивое, а шаблон помогает группироватьправильный ответ
  2. f-строки запрещены в модуле logging и дают warning
  3. С f-строкой сообщение не попадёт в обработчики лога
  4. Это только вопрос стиля, разницы в работе нет

Разбор

С %s и аргументами форматирование выполняется лениво: если уровень DEBUG выключен, строка не строится, а дорогой repr объекта не вычисляется. Кроме того, системы сбора логов (Sentry и подобные) группируют события по шаблону сообщения. f-строки работают и записываются, просто форматируются всегда.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.