RestAPI + Java+spring. Часть 9 — добавление логирования

В этой статье мы добавим логер в наше уже работающее приложение приложение.
В первой статье мы разобрались что вообще будем делать.
Во второй части создали Spring Boot приложение и подключили к нему maven.
В третьей части мы подключили БД (H2) и создали класс для добавления объекта (Entity)
В четвертой части мы создали классы контроллера и сервиса (используя шаблон Adapter)
В пятой части мы реализовали логику сервиса и репозитория
В шестой части был реализован автоматический перехват ошибок
В седьмой части были проверены все API и ExceptionHandler
В восьмой части была настроена обработка ошибок валидатора
В этой статье мы добавим логер в наше приложение.
Для простого логирования достаточно просто создать логгер и все. Мы же хотим, что бы наши логи сохранялись в отдельный файл, и выводились на консоль. В этом случае в консоли будут видны текущие логи, а если возникнет необходимость узнать что происходило раньше, и почему приложение упало, мы сможем открыть файл и посмотреть.
Добавление логирования.
Подробно о томЕ, почему как и зачем добавляется логирование в Java-Spring проект можно посмотреть в отдельной статье по ссылке
Итак — выполняем действия из статьи.
Отключаем дефлотный логбэк и добавляем log4j2
в pom.xml

Добавляем log4j2.xml в папку resources

Настраиваем логирование в файле log4j2.xml

Логер настроен, осталось только прописать его везде, где он нам нужен. Сделаем это в классе ItemServiceImpl
- Создаем переменную LOGGER
private static final Logger LOGGER = LogManager.getLogger(ItemServiceImpl.class); - Добавляем логирование во всех методах

Это пример одного измененного метода. Посмотреть все логирование можно открыв код на github.
Запускаем приложение и смотрим что происходит.
- в корневой папке проекта была создана папка logs

2. в папке logs появился файл

3. если открыть файл — то мы увидим, что он полностью дублирует консоль

Попробуем теперь создать объект в postman

смотрим логи — и не видим в них ничего нового…
Проблема в том, что в файле log4j2.xml мы перехватываем логи начиная с уровня info, а в коде прописываем уровень debug. Нужно или в настройках изменить код на debug (но тогда мы увидим очень много лишней информации) или в кое писать логи на уровне info

исправляем код, создаем еще раз обьект — и видим в логах

смотрим в файле — видим там ту же запись.
Логирование работает. Пир желании можно настроить, например файл — перехватывающий все логи начиная с уровня debug, а консоль — с уровня info.
Код можно посмотреть по ссылке https://github.com/natalyaKh/items/tree/logging