如何使用 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 启用线路日志记录
Spring Boot 日志记录 - log4j2 日志记录不起作用?