2011-08-06 137 views
3

我有以下的log4j.properties文件信息..Hibernate日誌信息太多

log4j.appender.file = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.file.File = C:\\app\\file.log 
log4j.appender.file.Threshold = TRACE 
log4j.appender.file.DatePattern = '.'yyy-MM-dd 
log4j.appender.file.layout = org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern = %d %5p [%C:%M:%L] - %m%n 
log4j.rootLogger = DEBUG, file 
#HIbernate logging 
log4j.logger.org.hibernate.SQL = DEBUG, file 
log4j.logger.org.hibernate.type = TRACE, file 
log4j.additivity.org.hibernate.SQL = false 

問題這個配置是它寫了太多的信息,日誌文件,該文件正在成長爲與宏塊短時間內。所以我想知道是否有任何事情可以阻止hibernate搞砸日誌文件,只寫sql選擇語句和參數,而不是其他任何東西。

回答

3

而不是真正詳細和不直觀的hibernate SQL日誌記錄,您可以使用Pass through Java JDBC驅動程序,該驅動程序可以爲其他JDBC驅動程序記錄SQL和/或JDBC calls

通過JDBC驅動程序的優點是,對於預準備語句,已記錄的輸出將綁定參數自動插入到SQL輸出中。這在很多情況下大大提高了可讀性,調試和日誌的大小。 SQL時序信息可以在需要時生成。

Hibernate的日誌記錄已記錄類似於:

select bs0_.A_REF as A2_7_0_ from B bs0_ where bs0_.other = 0 and bs0_.A_REF=? 
TRACE 2011-08- 03 00:30:45,317 binding '123' to parameter: 1 

與很多參數的大查詢也可以是不好受的數據庫上手動執行查詢之前全部更換綁定參數。

有了通行證通過JDBC驅動程序已登錄類似於:

select bs0_.A_REF as A2_7_0_ from B bs0_ where bs0_.other = 0 and bs0_.A_REF=123 

所有綁定參數都解決了,你只需要複製粘貼到數據庫執行查詢。

您可以檢查log4jdbc作爲通過JDBC驅動程序的良好傳遞。
要關閉休眠日誌記錄,請確保在配置文件和所有與SQL相關的記錄器中設置爲false hibernate.show_sql屬性。請參閱Logging Configuration參考文檔部分

+1

非常感謝Joel ..我遵循了您的建議並使用了log4jdbc驅動程序,並將此屬性設置爲「log4j.logger.jdbc.sqlonly = DEBUG」是否還有其他任何屬性有用嗎? – RKodakandla

+0

我設置了'log4j.logger.jdbc.sqlonly = INFO' DEBUG由於包含類名和行號而過於冗長,並且在使用時會造成額外的性能損失。如果在類路徑中添加'log4jdbc.properties'文件並設置屬性'log4jdbc.dump.sql.maxlinelength = 7000',則可以在控制檯中逐行輸入一條SQL語句。 –

+0

@Joel ..它不是爲我工作..我在log4jdbc.properties文件中添加這兩行,並將其放在web-inf/classes下'log4jdbc.debug.stack.prefix = com.abcd log4jdbc.dump.sql.maxlinelength = 7000' .. sql語句仍然在多行,並且第一個屬性也不用於確定調用序列 – RKodakandla