Журнал запросов
Краткая запись о запросе помогает быстро ответить на три вопроса: какой метод API вызвали, какой статус он вернул и сколько времени заняла обработка.
Вывод по умолчанию
INFO com.example.OrderController : HTTP GET /orders/1001 -> 200 (18 ms)
Запись содержит:
- HTTP-метод;
- URI запроса и строку параметров;
- итоговый HTTP-статус;
- длительность в миллисекундах.
Почему категорией логгера служит контроллер
После завершения запроса SmartMVC получает обработчик, найденный Spring MVC. Если это метод контроллера, класс контроллера используется как категория логгера.
Поэтому уровень можно настроить отдельно для конкретного контроллера:
logging:
level:
com.example.OrderController: DEBUG
Если Spring выбрал обработчик, который не является методом контроллера, например обработчик статических ресурсов, SmartMVC использует класс этого обработчика как категорию логгера. Резервная категория ink.icoding.mvc.request применяется только тогда, когда у запроса вообще нет сопоставленного обработчика.
Граница между синхронными и асинхронными запросами
Для обычного синхронного Servlet-запроса записанные статус и длительность относятся к окончательному результату обработки запроса.
При асинхронной обработке Spring MVC через Callable, DeferredResult, WebAsyncTask или StreamingResponseBody текущий фильтр пишет запись, когда завершается первоначальный Servlet dispatch. Поэтому статус и длительность могут не отражать фактическое завершение асинхронной задачи или потока. Если нужны измерения до момента полного завершения, используйте AsyncListener или отдельный компонент наблюдаемости для асинхронных запросов.
Уровень журналирования SmartMVC
spring:
smart:
mvc:
request-log:
enabled: true
level: INFO
Поддерживаются TRACE, DEBUG, INFO, WARN и ERROR. Значение по умолчанию — INFO.
Чувствительные данные
Стандартная итоговая запись не содержит:
- заголовки запроса;
- тело запроса;
- тело ответа;
- бизнес-объект, возвращённый контроллером.
Однако в неё входит исходная строка параметров. Не передавайте пароли, токены, номера документов и другие чувствительные значения в URL: URL может сохраняться веб-сервером, прокси и платформой журналирования.
Для бизнес-аудита читайте CurrentAuth в бизнес-слое и записывайте только необходимые, предварительно обезличенные данные.
Отключение журнала запросов
spring.smart.mvc.request-log.enabled: false
После отключения фильтр журналирования запросов не регистрируется.