如何使用 log4j2.xml 配置休眠日志记录?

Posted

技术标签:

【中文标题】如何使用 log4j2.xml 配置休眠日志记录?【英文标题】:How to configure hibernate logging using log4j2.xml? 【发布时间】:2014-02-04 08:33:57 【问题描述】:

我最近切换到 Apache log4j2,但仍然找不到使用 log4j2.xml 配置休眠日志记录的方法。

因为我找不到解决这个问题的方法,所以我仍然显式地使用 log4j.properties 文件进行休眠。这不是最好的解决方案,因为我的 log4j2.xml 使用 JPA appender(将日志写入数据库)。我不想为休眠编写单独的逻辑。

有没有办法使用 log4j2 配置休眠日志记录?

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

如建议 https://issues.apache.org/jira/browse/LOG4J2-172 您可以添加系统属性以强制休眠使用 slf4j

-Dorg.jboss.logging.provider=slf4j

log4j-slf4j-impl 也应该添加到类路径中

我的自定义解决方案: 使用弹簧,您可以放置 org.jboss.logging.provider=slf4j 在属性文件中

(envConfigLocation 是文件地址)

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

【讨论】:

【参考方案3】:

可以将对 log4j-1.x API 的调用重定向到 log4j-2.0 实现。包含的FAQ about which jars 解释了如何执行此操作。执行此操作时,您可能需要从类路径中删除旧的 log4j-1.x jar。

【讨论】:

我按照常见问题解答中的说明进行操作,但没有帮助。必须有其他要求 - 可能是该属性设置。

以上是关于如何使用 log4j2.xml 配置休眠日志记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Apache HttpClient 5 启用线路日志记录

如何在log4j2.xml中动态设置日志文件路径

log4j2.xml基本配置

Spring Boot 日志记录 - log4j2 日志记录不起作用?

Spring Boot 2.x 实践记:log4j2.xml

Spring Boot 2.x 实践记:log4j2.xml