Hibernate не использует Log4J напрямую. Вот почему ваши сообщения попадают в файл WebSphere SystemOut.log.
До версии 3.2 hibernate использовал Jakarta Commons Logging в качестве фасада. С версии 3.3 и выше она переключилась на SLF4J (Simple Logging Facade для Java). Как и в случае с журналом общего пользования в Джакарте (JCL), SLF4J - это просто фасад, часто привязываемый к другим структурам ведения журнала, таким как ведение журнала Java или, в данном случае, к самому Log4J.
Я понимаю, что ваше приложение уже использует Log4J. Я также предполагаю, что вы используете Hibernate 3.3 или более новую версию.
Прежде всего, добавьте поддержку SLF4J в ваш проект. Вы делаете это, добавляя эти зависимости (с Ivy, Maven или как хотите):
slf4j-api.jar (пакеты Core SLF4J)
slf4j-log4j12.jar (связывает SLF4J с Log4J)
Таким образом, когда Hibernate регистрирует какое-либо сообщение, SLF4J перехватывает его и направляет в Log4J.
Теперь, когда дело доходит до вашего собственного кода приложения, у вас есть два подхода.
1: Держите ваши классы непосредственно взаимодействующими с классами Log4J (а именно, Logger и LoggerFactory)
Таким образом, вы сохраняете ваши классы напрямую ссылающимися на Log4J Logger, например:
Logger logger = Logger.getLogger("com.foo"); // from package org.apache.log4j
Короче говоря, Hibernate будет использовать SLF4J -> Log4J, а вы будете использовать непосредственно Log4J
2: Второй подход заключается в том, чтобы ваш код также использовал SLF4J. Это не такое большое изменение, так как вам, вероятно, придется изменить только одну строку кода в каждом из ваших классов, которая создает сообщения журнала:
Logger logger = LoggerFactory.getLogger("com.foo"); // from package org.slf4j
Если вы используете более старую версию Hibernate (3.2 или более раннюю), вам придется обмануть ее, чтобы не использовать Jakarta Commons Logging. Во-первых, вам нужно будет удалить файлы JAR, регистрирующие достояние, из ваших зависимостей (вручную или с исключением, если вы используете какой-либо менеджер зависимостей). Затем вам нужно добавить порт общего входа SLF4J в ваш classpath:
add jcl-over-slf4j-xyzjar (xyz - его версия. Я использую jcl-over-slf4j-1.6.1.jar , например).
Этот jar имеет точные классы и пакеты старого commons-logging.jar, таким образом, эффективно обманывая все зависимые от commons-logging приложения для входа в SLF4J.