5

如何让 hibernate 4 通过 logback 登录?我将一场战争部署到了wildfly 8 final,并且我正在使用带有logback的slf4j。日志记录设置在应用程序中 100% 工作,控制台附加程序和文件附加程序都按预期工作。

这是我为使 slf4j + logback 工作所做的工作:

在 WEB-INF 中使用 jboss-deployment-structure.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" />

我在日志中看不到任何与休眠相关的内容。

我唯一一次从休眠中看到任何东西是当我添加到我的 persistence.xml 时:

<properties>
    <property name="hibernate.show_sql" value="true"/>
    <property name="hibernate.format_sql" value="true"/>
</properties>

但即使我的根记录器设置为 trace ,它也会记录到服务器日志和控制台而不是我的 logback 附加程序。. .

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 记录准备好的语句。不幸的是,这也没有提供任何获取查询参数的方法

谁能帮我吗?

4

1 回答 1

6

因为 Hibernate 不是您的部署的一部分,并且是服务器的一部分,所以它不能在您的部署中使用 logback 配置。Hibernate 将始终使用服务器日志记录配置。通常这是在日志子系统中,但如果删除则由logging.properties配置目录中的文件控制。

可以将服务器(至少绝对不是域的独立服务器)配置为使用 logback。我还没有尝试过,这需要一些工作。你必须确保 jboss-logmanager 模块在启动时不会被 JBoss 模块加载,并且 logback 确实被加载。同样,这可能有效,也可能无效:) 如果您这样做,您将完全失去配置日志记录的任何管理功能,例如打开调试日志记录。

于 2014-02-24T17:04:42.953 回答