#java #hibernate #exception #log4j
#java #спящий режим #исключение #log4j
Вопрос:
Досадно, что Hibernate в некоторых случаях, похоже, любит записывать журнал в log4j сам. Я этого не хочу. Я бы хотел, чтобы он создавал исключение, когда что-то идет не так, как в хорошей библиотеке.
Кто-нибудь знает, возможно ли это, и, что более важно, как мне это сделать?
Например, я получаю этот журнал уровня ОШИБОК «Обнаружена взаимоблокировка при попытке получить блокировку; попробуйте перезапустить транзакцию». Было бы не так уж плохо, если бы он хотя бы включал трассировку стека или, возможно, запрос, который привел к этой тупиковой ситуации. Но это не так, поэтому было сложно отладить некоторые из этих случаев.
Я просмотрел файл dtd отображения гибернации, XML-файл конфигурации гибернации и файл dtd конфигурации гибернации, но мне ничего не приходит в голову как способ управления протоколированием.
Я вижу следующие строки в моем файле log4j.properties:
# Don't log Hibernate flushing exceptions (usually StaleStateExceptions)
log4j.logger.org.hibernate.event.def.AbstractFlushingEventListener=FATAL
log4j.logger.org.hibernate.jdbc.AbstractBatcher=FATAL
Будет ли hibernate генерировать исключение, если я обозначу определенные вещи как «ФАТАЛЬНЫЕ»?
Я немного заблудился в болоте гибернации, поэтому был бы признателен за некоторые указания. В качестве контекста я работаю с hibernate уже 2 года, но я ни в коем случае не эксперт в этом.
Комментарии:
1. Я думаю, что hibernate генерирует исключения, которые, вероятно, проглатываются вашим приложением. Можете ли вы поместить try catch вокруг вызова hibernate, который вызывает проверку этого сообщения журнала.
2. У нас есть try catch практически для всего в нашей системе, включая вызов, который вызывал эти журналы. Я знаю, как работают исключения.
Ответ №1:
Мы обнаружили, что hibernate фактически генерирует исключения, но он также регистрирует. Мы устанавливаем наш log4j таким образом, чтобы hibernate не регистрировал исключения из определенных классов, как я написал в своем вопросе:
# Don't log Hibernate flushing exceptions (usually StaleStateExceptions)
log4j.logger.org.hibernate.event.def.AbstractFlushingEventListener=FATAL