Yurii Bondarenko
Yurii Bondarenko

Reputation: 3540

How to configure hibernate logging using log4j2.xml?

I recently switched to Apache log4j2, and still can not find a way to configure hibernate logging using log4j2.xml.

Because I can not find a way around this problem I still use log4j.properties file explicitly for hibernate. This is not the best solution since my log4j2.xml uses JPA appender (writes logs to db). I do not want to write separate logic for hibernate.

Is there a way to configure hibernate logging using log4j2?

Upvotes: 10

Views: 10712

Answers (3)

AllanT
AllanT

Reputation: 961

I found an answer to this question at: How to redirect all logs from hibernate and spring to log4j2?

Basically log4j2 doesn't work with Hibernate so you have to use log4j. But you still use your log4j2 configuration. You need the following dependencies and then the magic happens in the background.

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.1</version>
</dependency>
<dependency>
<!--HIBERNATE LOGGER (log4j)-->
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.6</version>
</dependency>

Upvotes: 4

cyprian
cyprian

Reputation: 371

As suggested in https://issues.apache.org/jira/browse/LOG4J2-172 you can add system property to force hibernate use slf4j

-Dorg.jboss.logging.provider=slf4j

also log4j-slf4j-impl should be added to classpath

My custom solution: with Spring you can place org.jboss.logging.provider=slf4j in property file

(envConfigLocation is file url)

<bean id="propertyConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
   <property name="location" ref="envConfigLocation" />
   <property name="order" value="1"/>
</bean>

Upvotes: 5

Remko Popma
Remko Popma

Reputation: 36754

It is possible to redirect calls to the log4j-1.x API to the log4j-2.0 implementation. The FAQ about which jars to include explains how to do this. You probably need to remove the old log4j-1.x jar from the classpath when you do this.

Upvotes: 0

Related Questions