Реализация своего Spring Boot Starter для логирования HTTP запросов в приложении на базе Spring Boot.
http-logger-starter позволяет логировать все входящие запросы и исходящие ответы в приложении, к которому он подключен.
Основные моменты реализации:
- Механизм перехвата реализован через использование интерцепторов Spring
- Реализована автоконфигурация с использованием Spring Boot
- Реализована настройка уровня логирования и форматом вывода логов через файл конфигурации
http-logger-starter включает в себя юнит тесты для проверки корректности его работы
Состав репозитория:
- http-logger-starter - сам стартер
- sample-service - демо сервис, в котором используется http-logger-starter
- Запуск докера с базой данных
docker-compose up
- Запуск приложения sample-service через IDE
Пример логов из сервиса с подключенным http-logger-starter:
2024-05-21T12:05:10.289+03:00 INFO 25268 --- [nio-8080-exec-2] t.o.h.interceptor.LoggingInterceptor : Incoming Request: Method: GET, URL: /etc/hi, Headers: [user-agent:"PostmanRuntime/7.38.0", accept:"*/*", postman-token:"1d4e02da-19b2-4768-be20-c113787780d5", host:"localhost:8080", accept-encoding:"gzip, deflate, br", connection:"keep-alive"]
2024-05-21T12:05:10.314+03:00 INFO 25268 --- [nio-8080-exec-2] t.o.h.interceptor.LoggingInterceptor : Outgoing Response: Status: 200, Headers: [Content-Type:"text/plain;charset=UTF-8", Content-Length:"2", Date:"Tue, 21 May 2024 09:05:10 GMT", Keep-Alive:"timeout=60", Connection:"keep-alive"], Time Taken: 25 ms
Логируемая информация по входящим запросам:
- Метод запроса
- URL
- Заголовки
Логируемая информация по исходящим ответам:
- Статус ответа
- Заголовки
- Время обработки запроса
Для установки http-logger-starter в локальный Maven репозиторий необходимо выполнить команду для http-logger-starter:
cd http-logger-starter
./mvnw install
cd ../
Для подключения http-logger-starter в локальный проект необходимо добавить зависимость:
<dependency>
<groupId>t1.openschool</groupId>
<artifactId>http-logging-starter</artifactId>
<version>1.0.0</version>
</dependency>
http-logger-starter содержит конфигурацию по умолчанию и будет работать автоматически после включения в зависимости.
Из сервиса-потребителя доступна конфигурация http-logger-starter через application.yml.
Пример yml со значениями по умолчанию:
logging:
starter:
enabled: true
level: INFO
print-request-headers: true
print-response-headers: true
print-response-time: true
- enabled - (true / false) - включение или отключение http-logger-starter. Если отключить, то интерцептор не будет зарегистрирован в контексте приложения
- level - (TRACE / DEBUG / INFO) - уровень логов, который будет использовать http-logger-starter для выдачи своих сообщений
- print-request-headers - (true / false) - включение или отключение печати информации о заголовках запросов в сообщение
- print-response-headers - (true / false) - включение или отключение печати информации о заголовках ответов в сообщение
- print-response-time - (true / false) - включение или отключение печати информации о времени обработки запроса в сообщение
В проекте реализованы контроллеры с CRUD методами по работе с сущностью User, а так же контроллер для etc запросов. Все существующие методы можно увидеть в коллекции Postman. Все методы перехватываются http-logger-starter и логируются.
http-logger-starter подключен в pom:
<dependency>
<groupId>t1.openschool</groupId>
<artifactId>http-logging-starter</artifactId>
<version>1.0.0</version>
</dependency>
При проблемах с подключением http-logger-starter необходимо выполнить установку стартера в локальный репозиторий Maven:
cd http-logger-starter
./mvnw install
cd ../
При работающем приложении доступен Swagger:
Коллекция Postman содержит запросы ко всем эндпоинтам приложения, необходимыми для проверки его работоспособности.
Сборка приложения и запуск через docker:
cd sample-service
./mvnw clean package
cd ../
docker-compose -f docker-compose-full.yml up
Поднимаемые контейнеры:
sample-service-app - Приложение - порты 8080:8080
sample-db - База данных PostgreSQL - порты 8081:5432
Запуск контейнера с базой данных:
docker-compose up
Поднимаемые контейнеры:
sample-db - База данных PostgreSQL - порты 8081:5432
Приложение можно запустить любым удобным способом, например из IDE.
Для удобства тестирования база данных очищается при каждом запуске приложения.