2014-01-15 115 views
9

我最近切換到Apache log4j2,仍然找不到使用log4j2.xml配置hibernate日誌記錄的方法。如何使用log4j2.xml配置hibernate日誌記錄?

因爲我無法找到解決此問題的方法,我仍然明確使用log4j.properties文件進行休眠。這不是最好的解決方案,因爲我的log4j2.xml使用JPA appender(將日誌寫入db)。我不想爲休眠編寫單獨的邏輯。

有沒有辦法使用log4j2配置hibernate日誌記錄?

回答

0

可以將對log4j-1.x API的調用重定向到log4j-2.0實現。包含的FAQ about which jars解釋瞭如何執行此操作。當您這樣做時,您可能需要從類路徑中移除舊的log4j-1.x jar。

+0

我按照常見問題中的說明進行操作,但沒有幫助。必須有其他必需的東西 - 可能是屬性設置。 – Adam

5

正如 https://issues.apache.org/jira/browse/LOG4J2-172 建議你可以添加系統屬性來強制Hibernate使用SLF4J

-Dorg.jboss.logging.provider = SLF4J

還的log4j-SLF4J-IMPL應添加到類路徑

我的自定義解決方案: 與春天你可以放置 org.jboss.logging.provider = slf4j 屬性文件

(envConfigLocation是文件的URL)

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

我試過了,它的工作原理。 – Stony

3

我發現這個問題的答案在:How to redirect all logs from hibernate and spring to log4j2?

基本上log4j2不與Hibernate一起工作,所以你必須使用log4j的。但是你仍然使用你的log4j2配置。你需要下面的依賴關係,然後魔法發生在後臺。

<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>