0

首先感谢您花时间阅读我的问题。

我将从我的环境开始: Primefaces 3.5 Hibernate 4.3.2 Glassfish 3.1.2

我的问题是:我想记录使用 log4j 的 sql 查询 hibernate (以及绑定到这些查询的参数)。在我决定实施Open Session in View模式之前,日志记录一直有效。现在日志只包含来自此过滤器的信息(如“启动数据库事务”等)。

我的 log4j.xml 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
    <appender name="production"
              class="org.apache.log4j.rolling.RollingFileAppender">                        
        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">

            <param name="ActiveFileName" value="app.log"/>  
            <param name="FileNamePattern" value="app.log.%d{yyyy-MM-dd}.gz" />

        </rollingPolicy>

        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                   value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1}:%L - %m%n" />
        </layout>
    </appender>

    <appender name="debugfile"
              class="org.apache.log4j.rolling.RollingFileAppender">
        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">

            <param name="ActiveFileName" value="debug.log"/>  
            <param name="FileNamePattern" value="debug.log.%d{yyyy-MM-dd}.gz" />

        </rollingPolicy>        

        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                   value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1}:%L - %m%n" />
        </layout>        
    </appender>

    <appender name="hibernatefile"
              class="org.apache.log4j.rolling.RollingFileAppender">

        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">

            <param name="ActiveFileName" value="hibernate.log"/>  
            <param name="FileNamePattern" value="hibernate.log.%d{yyyy-MM-dd}.gz" />

        </rollingPolicy>


        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                   value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1}:%L - %m%n" />
        </layout>
    </appender>


    <logger name="org.hibernate.type" additivity="false">
        <level value="TRACE" />
        <appender-ref ref="hibernatefile"/>
    </logger>

    <logger name="org.hibernate.SQL" >
        <level value="DEBUG" />
        <appender-ref ref="hibernatefile"/>
    </logger>


    <logger name="org.hibernate">
        <level value="info"/>
        <appender-ref ref="hibernatefile" />
    </logger>

    <root>        
        <appender-ref ref="debugfile" />
        <appender-ref ref="production" />        
    </root>
</log4j:configuration>

来自 hibernate 的 trace、info 和其他信息不会打印在任何地方。

谢谢您的帮助,

安德烈

4

1 回答 1

0

好的,所以我想我在这个问题上得出了结论。这些技术和/或模式的组合没有问题,而是 Hibernate 的版本。我之前使用过 Hibernate 3,日志记录很好,但根据这个文档http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch03.html#configuration-logging从 Hibernate 开始4.0 他们放弃了 slf4j 作为日志记录的门面,转而使用 JBoss 日志记录。从这个链接(https://community.jboss.org/wiki/Logging)看来,JBoss 日志记录有一个使用 log4j 的变体,但不幸的是我没有设法将整个环境配置为使用 JBoss 日志记录而不是 slf4j。对于我的应用程序,我恢复到 Hibernate 3,并且日志记录运行良好。

如果有人使用带有 JBoss 日志记录和 log4j 的 Hibernate 4 并且有一些示例配置,我认为很多人会很感激,因为我在搜索中没有找到任何相关信息。

感谢您提供任何相关信息。

于 2013-07-29T23:21:55.560 回答