2017-02-22 59 views
0

我想將hibernate查詢記錄到一個webapp特定的日誌文件中。 我可以記錄任何消息,但我仍然無法記錄休眠查詢。
即使在不同的文件中,它們也正在server.log內部進行記錄,但我需要爲運行在同一服務器上的每個應用程序指定一個特定於應用程序的日誌。
我正在使用log4j 1.2,我能夠創建日誌文件,記錄傳遞給控制檯但是hibernate查詢的每個信息。
database.properties文件中,我找到了負責控制檯中日誌記錄輸出的hibernate.show_sql=true。 這是我提到的那種控制檯的日誌輸出:無法登錄Hibernate查詢log4j

16:10:3​​5827 INFO [標準輸出(HTTP-本地主機-127.0.0.1-8080-1)休眠:選擇[...](這裏被輸出正確的查詢通過,準備語句?

無論如何,我需要的是記錄該輸出。 我嘗試了不同的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​​5827 INFO [標準輸出](HTTP-本地主機 - 127.0.0.1-8080-1)休眠:選擇[...](查詢的其餘部分)

回答

0

配置logger在以下幾類:

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> 
+0

解決這個問題。 –

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