Почему в логировании предпочитают log.debug("user {} order {}", userId, orderId) вместо конкатенации строк?
Отложенное форматирование: строка собирается, только если уровень включён. Конкатенация вычисляется до вызова всегда — на горячем пути с выключенным debug это лишние аллокации.
- Дорогой аргумент всё равно вычисляется — isDebugEnabled() или лямбда (SLF4J 2: log.atDebug().addArgument(() -> ...))
- Исключение — последним аргументом без плейсхолдера: стектрейс сохранится
- Структурное логирование: ключ-значение для поиска в ELK
А ещё Не логировать персональные данные и секреты
Подробно
Конкатенация вычисляется до вызова метода, поэтому строка собирается всегда, даже если сообщение будет отброшено — на горячем пути с отключённым debug это лишние аллокации без всякой пользы. Плейсхолдеры переносят форматирование внутрь, где оно выполняется только при необходимости. Если аргумент сам по себе дорог (сериализация объекта), помогает либо проверка isDebugEnabled, либо API с поставщиком в современных библиотеках. Автоматической защиты данных плейсхолдеры не дают: за то, чтобы в лог не попали пароли, токены и персональные данные, отвечает автор кода. И полезная привычка — писать структурированные логи с correlation id, чтобы записи можно было связать в цепочку.
Что хотят услышать
- Причина.
- Ограничение с дорогими аргументами.
Частые ошибки
- Логировать целые объекты запроса вместе с секретами.
- Считать, что плейсхолдеры сами что-то маскируют.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Плейсхолдеры автоматически маскируют персональные данные в сообщении
- ✗Конкатенация строк не поддерживается большинством библиотек логирования
- ✗Так сообщение занимает меньше места в файле лога
- ✓Строка собирается, только если уровень включён
Что спросят дальше
- Когда всё же полезна проверка isDebugEnabled?
- Что обязательно должно попадать в лог для расследования инцидента?
Разбор темы
- Тестирование, логирование и базовые паттерны
Unit/integration тесты, уровни логирования, MDC и Singleton без ловушек.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.