使用日志记录配置文件时,Hibernate不会在Wildfly中记录SQL

时间:2014-12-19 13:36:02

标签: hibernate logging wildfly wildfly-8

我在Wildfly 8.1中定义了一个,因为我需要从Hibernate 4.3.6中记录SQL语句。

这是相关的standalone.xml部分:

<logging-profiles>
            <logging-profile name="myprofile">
                <console-handler name="CONSOLE">
                    <level name="INFO"/>
                    <formatter>
                        <named-formatter name="COLOR-PATTERN"/>
                    </formatter>
                </console-handler>
                <custom-handler name="DB" class="it.x.y.jbosseapsqllogger.Oracle10SqlLogger" module="it.x.y.jbosseapsqllogger">
                    <level name="DEBUG"/>
                    <properties>
                        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
                        <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xx"/>
                        <property name="username" value="xx"/>
                        <property name="password" value="xx"/>
                    </properties>
                </custom-handler>
                <periodic-rotating-file-handler name="FILE" autoflush="true">
                    <formatter>
                        <named-formatter name="PATTERN"/>
                    </formatter>
                    <file relative-to="jboss.server.log.dir" path="server.log"/>
                    <suffix value=".yyyy-MM-dd"/>
                    <append value="true"/>
                </periodic-rotating-file-handler>
                <logger category="org.hibernate.type.descriptor.sql.BasicBinder" use-parent-handlers="false">
                    <level name="TRACE"/>
                    <handlers>
                        <handler name="DB"/>
                        <handler name="FILE"/>
                    </handlers>
                </logger>
                <logger category="org.hibernate.SQL" use-parent-handlers="false">
                    <level name="DEBUG"/>
                    <handlers>
                        <handler name="CONSOLE"/>
                        <handler name="FILE"/>
                    </handlers>
                </logger>
                <root-logger>
                    <level name="INFO"/>
                    <handlers>
                        <handler name="CONSOLE"/>
                        <handler name="FILE"/>
                    </handlers>
                </root-logger>
                <formatter name="PATTERN">
                    <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
                </formatter>
                <formatter name="COLOR-PATTERN">
                    <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
                </formatter>
            </logging-profile>
        </logging-profiles>

我正确地从org.hibernate.type.descriptor.sql.BasicBinder类别中获取绑定参数,但是自己看不到SQL语句;这告诉我,我正在引用MANIFEST.MF中的配置文件:

Logging-Profile: myprofile

请注意,如果我将org.hibernate.type.descriptor.sql.BasicBinder和org.hibernate.SQL记录器从日志记录配置文件中移出到主要部分,一切都按预期工作(当然,对于每个已部署的应用程序,这是我需要避免的。)

我尝试并调试了Hibernate和Wildfly日志记录子系统,但收效甚微。 我注意到的是,org.hibernate.SQL不是一个类,而是SqlStatementLogger.java中的硬编码类:

public class SqlStatementLogger {
private static final Logger LOG = CoreLogging.logger( "org.hibernate.SQL" );

private boolean logToStdout;
private boolean format;
[...]

任何想法?非常感谢

1 个答案:

答案 0 :(得分:0)

服务器添加的依赖项不会使用日志记录配置文件或按部署日志记录配置。所有服务器依赖项都使用系统级别(默认)日志记录配置。

像这样的记录器就是为什么这不起作用的完美例子。由于依赖关系在所有部署中共享,因此将根据使用该记录器调用日志语句的第一个部署来配置静态记录器。