2009-11-24 99 views
4

我正在研究彈簧可能切換到彈簧棧。我認爲很酷的事情之一是Spring jdbc記錄所有執行的sql的能力。所以我把log4j放進去,建立一個log4j.properties文件。並沒有SQL。Spring JDBC不記錄SQL與log4j

這裏是log4j.properties文件:

log4j.appender.stdout=org.apache.log4j.ConsoleAppe nder 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.Patt ernLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{ ABSOLUTE} %5p %c{1}:%L - %m%n 
log4j.rootLogger=debug, stdout 
log4j.category.org.springframework.jdbc.core=DEBUG 

這裏是通過JDBC春天的輸出對於一些非常簡單的插入SQL:http://pastie.org/713189

+0

您是否重新啓動服務器?是否設定了閾值? – 2009-11-27 22:39:03

+0

嗨菲爾...你做了什麼解決這個問題? – 2013-09-18 16:21:06

回答

0

從我的理解春天,當你使用準備將打印出的信息聲明。

在Spring的論壇上查看this discussion

0

你是如何執行SQL的? Spring不會奇蹟般地記錄發送到數據庫的SQL,你必須通過適當的渠道。例如,如果您通過使用JdbcTemplate(直接或通過JdbcDaoSupport)執行SQL,那麼會記錄SQL的某些操作,但僅記錄那些涉及直接SQL的操作。

如果您使用Hibernate或準備好的語句,那麼Spring永遠不會看到SQL本身,因此無法記錄它。

如果您發佈了一些演示如何執行SQL的示例代碼,這將有很大幫助。

+0

我正在使用Spring的JdbcTemplate。我實際上使用了一些受版權保護的示例代碼(來自Enterprise Spring Recicpes),所以不要以爲我應該發佈它。儘管我會嘗試破解我自己的例子,那是我的下一步。 – 2009-11-24 20:39:08

2

您確定這是您的應用程序正在採集的log4.properties?我將您發佈的log4j.properties複製到本地計算機上的Spring應用程序中,除了JDBC日誌記錄之外,還有大量的Spring調試條目。我在輸出中看不到類似的調試條目。

幾個可能的罪魁禍首爲您log4j.properties沒有得到正確讀取是:

  • log4j.properties是不是在你的類路徑中。您可以嘗試對它做一個class.getResource()以查看它是否找到它。
  • 類路徑中還有另一個log4j.properties
  • 有些東西正在使commons-logging選擇使用不同的記錄器。你可以找到打開公用日誌診斷的說明here
9

嘗試設置這些額外的log4j記錄器。第一個將吐出經過spring的JdbcTemplate的SQL,第二個將給出Spring在預處理語句上設置的參數值。

<logger name="org.springframework.jdbc.core.JdbcTemplate"> 
    <level value="debug" /> 
</logger> 

<logger name="org.springframework.jdbc.core.StatementCreatorUtils"> 
    <level value="debug" /> 
</logger> 

顯然這隻會如果你使用JdbcTemplate直接或間接執行的SQL工作。

+0

代碼第二行缺少'>' – Isaac 2013-05-08 18:02:24

+0

我正在使用它,但它仍然無法正常工作! – 2013-09-17 19:57:41

+1

第二個不給jdbctemplate中的值PreparedStatementSetter – Emilio 2014-01-15 13:16:25

2

嘗試

log4j.category.org.springframework.jdbc.core = TRACE 

幫我,剛好DEBUG是不夠的。我正在使用org.springframework.jdbc-3.0.6.RELEASE.jar與log4j-1.2.15和slf4j(1.6。4)

對於只是一個SQL(即如果你對綁定參數值不感興趣)DEBUG應該就足夠了。

<!-- activates query logging --> 
<category name="org.springframework.jdbc.core.JdbcTemplate"> 
    <level value="DEBUG"/> 
</category> 
<!-- activates parameter substitution logging --> 
<category name="org.springframework.jdbc.core.StatementCreatorUtils"> 
    <level value="TRACE"/> 
</category> 

..in我們的log4j.xml:

0

假設春3.0.7.RELEASE和log4j的1.2.17,我們得到了任務完成通過。

替換<category/><logger/>工作還行。