无法记录Hibernate查询log4j

时间:2017-02-22 15:30:49

标签: java hibernate logging log4j

我正在尝试将hibernate查询记录到特定于webapp的日志文件中。 我可以记录任何消息,但我仍然无法记录hibernate查询 它们被记录在server.log内,即使是在不同的文件中,但我需要为同一服务器上运行的每个应用程序提供特定于应用程序的日志。 我正在使用log4j 1.2,我能够创建日志文件,记录传递给控制台但是休眠查询的每个信息。
database.properties文件中,我找到了负责控制台中日志输出的hibernate.show_sql=true。 这是我所说的控制台记录输出:

  

16:10:3​​5,827 INFO [stdout](http-localhost-127.0.0.1-8080-1)Hibernate:选择[...](这里输出正确的查询,传递?准备好的声明)

无论如何,我需要的是记录输出。 我尝试了不同的log4j.xml设置,但仍然没有成功,它创建了日志文件,但没有记录这些输出。 这是当前设置,即将所有内容记录在同一个文件中,当我能够记录这些信息时,我将分离日志。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="mainFileAppender2" class="org.apache.log4j.RollingFileAppender">
   <param name="append" value="false" />
   <param name="maxFileSize" value="100MB" />
   <param name="maxBackupIndex" value="50" />
    <param name="File" value="${webapp.root}/WEB-INF/logs/mainCORE.log"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5p %c{1}:%L %m %n" />
    </layout>
</appender>

<appender name="journaldev-hibernate2" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="${webapp.root}/WEB-INF/logs/hib-queriesCORE.log" />
    <param name="Append" value="false"/><!--value="true" /-->
    <param name="ImmediateFlush" value="true" />
    <param name="MaxFileSize" value="200MB" />
    <param name="MaxBackupIndex" value="50" />

    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %d{Z} [%t] %-5p (%F:%L) - %m%n" />
    </layout>
</appender>
<root>
    <priority value="debug"></priority>
<!--    <appender-ref ref="stdout"/>  -->
    <appender-ref ref="mainFileAppender2"/>
</root>

此配置会记录除这些输出之外的所有内容。在server.log中记录如下:

  

16:10:3​​5,827 INFO [stdout](http-localhost-127.0.0.1-8080-1)Hibernate:选择[...](查询的其余部分)

2 个答案:

答案 0 :(得分:0)

为以下类别配置记录器:

log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE

第一个将记录SQL语句(使用?表示参数值),第二个将在需要时打印这些参数值。

所以这样的事情应该可以解决你的问题:

<category name="org.hibernate.SQL">
    <appender-ref ref="journaldev-hibernate2"/>
   <priority value="DEBUG"/>
</category>

<category name="org.hibernate.type">
   <appender-ref ref="journaldev-hibernate2"/>
   <priority value="TRACE"/>
</category>

答案 1 :(得分:0)

解决了这个问题;无论如何,它还提取从查询中提取的值

log = ${jboss.server.log.dir}/log/

#Loggers
log4j.rootLogger = INFO, FILE
log4j.logger.org.hibernate.SQL = DEBUG, HIBERNATE
log4j.logger.org.hibernate.type = TRACE, HIBERNATE

#Appenders
# Main appender
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=${log}/main.log
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d %-5p %c{1}:%L %m %n
log4j.appender.FILE.ImmediateFlush=true
log4j.appender.FILE.Threshold=debug
log4j.appender.FILE.Append=true
log4j.appender.FILE.DatePattern=dd-MM-yyyy
# Hibernate queries appender
log4j.appender.HIBERNATE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.HIBERNATE.File=${log}/hib-queries.log
log4j.appender.HIBERNATE.layout=org.apache.log4j.PatternLayout
log4j.appender.HIBERNATE.layout.ConversionPattern=%d %d{Z} [%t] %-5p     (%F:%L) - %m%n
log4j.appender.HIBERNATE.ImmediateFlush=true
log4j.appender.HIBERNATE.Threshold=debug
log4j.appender.HIBERNATE.Append=true
log4j.appender.HIBERNATE.DatePattern=dd-MM-yyyy