如何让 hibernate 4 通过 logback 进行日志记录?我有一场部署到 Wildfly 8 Final 的 war ,并且我正在使用 slf4j 和 logback。日志记录设置在应用程序中 100% 正常工作,控制台附加器和文件附加器均按预期工作。
这是我为使 slf4j + logback 工作所做的事情:
在 WEB-INF 中使用 jboss-deployment-struction.xml 排除日志子系统:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="logging" />
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>
在 pom 中包含 slf4j 和 logback 依赖项:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.1</version>
</dependency>
使用 org.slf4j.Logger 登录应用程序
在 logback.xml 中添加了 3 个记录器:
<logger name="my.package" level="TRACE"/>
<logger name="org.hibernate.type" level="ALL" />
<logger name="org.hibernate" level="TRACE" />
我在日志中没有看到任何与休眠相关的内容。
我唯一一次看到 hibernate 的任何内容是当我添加到 persistence.xml 时:
<properties>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
但它会记录到服务器日志和控制台,而不是记录到我的 logback 附加程序,即使我的根记录器设置为 trace 。 。 .
logback ViewStatusMessagesServlet 看起来很健康,并显示已注册的休眠记录器: 2014-02-23 19:02:37 INFO LoggerAction 将记录器 [org.hibernate.type] 级别设置为 ALL
2014-02-23 19:02:37 INFO LoggerAction 将记录器 [org.hibernate] 级别设置为 TRACE
我还可以使用在 persistence.xml 中注册的 hibernate.ejb.interceptor 记录准备好的语句。不幸的是,这也没有提供任何方法来获取查询参数
谁能帮帮我吗?
最佳答案
因为 Hibernate 不是您的部署的一部分,而是服务器的一部分,所以它无法在您的部署中使用 logback 配置。 Hibernate 将始终使用服务器日志配置。通常这是在日志子系统中,但如果删除则由配置目录中的 logging.properties
文件控制。
可以配置服务器(至少绝对不是域独立服务器)来使用 logback。我还没有尝试过这个,这需要一些工作。您必须确保 jboss-logmanager 模块在启动时不会被 JBoss 模块加载,而 logback 会被加载。同样,这可能有效,也可能无效:)如果您这样做,您将失去配置日志记录的任何管理功能,例如打开调试日志记录。
关于slf4j - Hibernate 4 Wildfly 8 日志记录不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21971576/