Как называется процесс логирования информации для отладки и анализа
Что проверяют
Сам термин тут только повод. Интервьюеру интересно, умеете ли вы логировать так, чтобы потом по логам найти причину падения, и знаете ли модуль logging глубже, чем basicConfig. Следом часто спрашивают, чем логи отличаются от метрик и трассировки.
Как отвечать
Процесс называется логированием (logging), а сами записи событий называют логами или журналом. Если речь о прослеживании одного запроса через несколько сервисов, это трассировка (tracing). Вместе с метриками всё это входит в наблюдаемость (observability).
Потом покажите, как это устроено в Python:
- логгеры:
logging.getLogger(__name__)в каждом модуле. Логгеры образуют иерархию по точкам в имени, записи всплывают к корневому; - уровни:
DEBUG,INFO,WARNING,ERROR,CRITICAL. У корневого логгера по умолчаниюWARNING, поэтомуinfoбез настройки не видно; - обработчики и форматтеры:
StreamHandler,RotatingFileHandler, формат со временем, уровнем и именем логгера. Конфигурацию удобно держать вlogging.config.dictConfig; - исключения: внутри
exceptвызывайтеlogger.exception(...), он пишет на уровнеERRORи сам добавляет трейсбек; - ленивое форматирование:
logger.info("user %s", user_id), а не f-строка. Тогда строка не собирается, если уровень отключён.
Для прода добавьте структурированные логи в JSON (structlog, python-json-logger), идентификатор запроса в каждой записи и отправку в централизованное хранилище вроде ELK или Loki. Для трассировки общепринятый стандарт сейчас OpenTelemetry.
Где спотыкаются
Используют print вместо логгера. У него нет уровней, времени, имени модуля, и его нельзя выключить без правки кода.
Вызывают logging.basicConfig повторно или внутри библиотеки и удивляются, что ничего не меняется: функция молча ничего не делает, если у корневого логгера уже есть обработчики. Для перенастройки есть параметр force=True.
Пишут в лог пароли, токены и персональные данные целиком. Логи читают многие и хранят долго, это готовая утечка.