Spring MVC Exception handler (перехват исключений). Настройка логирования в Spring MVC с помощью Logback

Перехват исключений (Exception Handling) в Spring MVC. Настройка логирования в Spring MVC с помощью Logback.

Обзор приложения Spring MVC + AngularJS + Bootstrap + HTML5
Используемые технологии и библиотеки
  • Spring MVC 4.2.4.Release
  • Logback 1.0.13
  • SLF4J 1.7.13
  • Maven 3.2.5
  • IntelliJ IDEA 15.0.2

1. Описание задачи

Рассмотрим как обрабатывать исключения в приложении Spring MVC. При этом добавим к нашему приложению логирование ошибок и действий в приложении с помощью библиотеки Logback.

2. Структура проекта

mvcExceptionsStructure

Для реализации задачи перехвата исключений и выполнения логирования в приложении были добавлены классы ExceptionController и ExceptionHandler. Контроллер служит для вызова метода, который будет выбрасывать исключение. Это исключение мы будем обрабатывать с помощью класса ExceptionHandler. Внутри обработчика исключений был добавлен класс Logger для записи необходимых событий в приложении (данные будут выводиться в консоль и записываться в файл на диске). При перехвате исключения пользователь будет перенаправлен на страницу exception.jsp.

3. Подключение зависимостей в pom.xml

Для перехвата и обработки исключений никаких дополнительных зависимостей относительно предыдущего раздела подключать не нужно. Всё уже находится в подключенных зависимостях Spring MVC. Для логирования будет использована современная библиотека Logback.

pom.xml целиком:

4. Настройка конфигурации spring mvc

Файлы конфигурации spring так же остались без изменений. Для класса обработчика исключений будет использована аннотация и реализация интерфейса. Поэтому приведу полные файлы под катом.

application-context.xml:

mvc-config.xml:

5. web.xml

Дополнительно ничего добавлено не было.

6. Java классы (контроллер и обработчик исключений)

Контроллер ну очень простой. При переходе по ссылке вида /runtimeException в методе будет искусственно выброшено RuntimeException исключение.

Это исключение мы будет обрабатывать в классе, который реализует интерфейс HandlerExceptionResolver. В Spring MVC достаточно реализовать этот интерфейс для перехвата исключений и их обработке по своему усмотрению:

При перехвате исключения мы можем запрограммировать любое поведение. Здесь мы просто логируем ошибку и передаем ViewResolver представление, на которое мы должны быть переброшены (в данном случае на страницу exception.jsp) и саму ошибку в переменной exceptionMsg.

Обратите внимание — оба класса отмечены аннотацией @Component и поэтому они оба будут находиться в контексте spring приложения и работать как нам нужно.

7. JSP Представление

На странице просто выводится сообщение, которое записано в объекте {exceptionMsg}, которое формируется на этапе выше.

8. Логирование

Как вы заметили в java классах использовался объект Logger. Для начала вам нужно создать файл logback.xml и поместить его в папку resources. В самом начале логер будет искать этот конфигурационный файл и будет с ним связан. Ниже приведены настройки для логирования.

logback.xml:

Первое на что обратить внимание — строчка

Здесь задается свойство, которое будет использовано как указание пути расположения файла с логами на диске. Далее идет указание к какому файлу будут прикрепляться логи (файл error.log) и какой будет для этого использован шаблон записи. Чуть ниже выставлен уровень debug. (Здесь так же закомментировано логирование для Hibernate, если хотите — можете раскоментить и посмотреть предыдущую тему по настройке ORM Hibernate).

В конце прописано куда будут записываться логи (если не хотите записи в файл или консоль, то закомментируйте\удалите соответствующую строчку, например для записи в файл — <appender-ref ref=»file»/> ).

9. Тестирование приложения

После перехода по ссылке Runtime Exception в меню сайта, мы получим в консоль следующую запись:

Так же это будет записано на диск.

mvcExceptions file

Ну и конечно вывод на странице сайта:

mvcExceptions page

 

 

Исходные коды

MVC_AngularJS_Html5 full project — полный проект Spring MVC + AngularJS + Bootstrap + HTML5.

7. Exception and Logging — код для этой части

Обзор приложения Spring MVC + AngularJS + Bootstrap + HTML5
Share Button
4
11142 Total Views 1 Views Today

2 thoughts on “Spring MVC Exception handler (перехват исключений). Настройка логирования в Spring MVC с помощью Logback

  1. Владимир:

    При запуске приложения в консоль пишет все как и предполагается, но вот лог не создается и страничка с ошибкой не выходит. Где копать?

    мы разве не должны были записать в mvc-config

    1. Александр:

      ModelAndView(«error/exception», «exceptionMsg», «ExceptionHandler msg: « + e.toString());

      Здесь перед error нужен слэш. И обращаться к контроллеру нужно по адресу localhost:8080/runtimeException. Тогда все заработает.

Добавить комментарий