Подавить журналы предупреждений для исключения в Spring Boot

У меня есть собственное исключение, подобное этому

@ResponseStatus(HttpStatus.UNAUTHORIZED)
public class AccessException extends RuntimeException {
}

Но когда я бросаю его из @RestController, он регистрирует это:

2018-04-17 11:44:58.239  WARN 17928 --- [nio-8080-exec-3] .w.s.m.a.ResponseStatusExceptionResolver : Resolved exception caused by Handler execution: site.user.AccessException

Я попытался проверить исходный код, но не смог найти, где это регистрируется. Я не хочу отключать ведение журнала, потому что оно может регистрировать другие вещи, которые меня интересуют. Я просто не думаю, что такое настраиваемое исключение должно регистрироваться каждый раз.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
915
2

Ответы 2

Вы можете установить уровень журнала для класса org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver на ERROR. Таким образом, вы потеряете журналы WARN, DEBUG и TRACE только для этого класса.

Если есть какие-то исключения уровня WARN, которые вы хотите видеть в этом классе, я вижу два варианта:

  • скопируйте org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver в свою кодовую базу, измените логирование. Убедитесь, что ваша копия находится вверху пути к классам, а Spring - внизу. Это своего рода взлом. ResponseStatusExceptionResolver - это деталь реализации Spring. Он может быть изменен / перемещен / удален в будущем выпуске.
  • напишите свою реализацию org.springframework.web.servlet.HandlerExceptionResolver, зарегистрируйте ее, убедитесь, что ResponseStatusExceptionResolver не зарегистрирован.

В том же классе есть еще один регистратор уровня предупреждений для неаннотированных классов исключений, которые я не хочу терять.

James Watkins 17.04.2018 19:43

В Spring вы можете добавить эту строку в свой application.properties, чтобы указать уровень ведения журнала для определенного класса:

logging.level.site.user.AccessException=ERROR

или же

logging.level.site.user.AccessException=OFF

Другие вопросы по теме