【问题标题】:Hibernate doesn't log SQL in Wildfly when using a logging-profile使用日志记录配置文件时,Hibernate 不会在 Wildfly 中记录 SQL
【发布时间】:2015-02-18 11:03:23
【问题描述】:

我在 Wildfly 8.1 中定义了 a,因为我需要从 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;
[...]

有什么想法吗?非常感谢

【问题讨论】:

    标签: hibernate logging wildfly wildfly-8


    【解决方案1】:

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

    像这样的记录器就是一个很好的例子,说明了为什么这不起作用。由于依赖项在所有部署之间共享,因此将根据使用该记录器调用日志语句的第一个部署来配置静态记录器。

    【讨论】:

    • 感谢詹姆斯。所以你认为没有办法解决这个问题?也就是说,只为一个部署记录 SQL 语句?
    • 不幸的是,没有办法做到这一点。
    猜你喜欢
    • 2015-09-08
    • 2018-05-05
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    相关资源
    最近更新 更多