2009-12-19 12 views
38

Ben JdbcTemplate ve NamedParameterJdbcTemplate harikaları hakkında öğreniyorum. Gördüğümü beğendim, ancak yürütmekte olan temel SQL'i görmenin kolay bir yolu var mı? Bunu hata ayıklama amacıyla görmek istiyorum (örneğin ortaya çıkan SQL'in harici bir araçta hata ayıklaması için).İlkbahar JdbcTemplate'deki temel SQL'i görmek?

+0

Netleştirmek için, SQL'i '?' Ile görmek isterim. İçinde tüm sürecin doğru çalıştığından emin olmak için. – Artem

+0

Merhaba Artem, Bunu kodunuzda başardınız mı? –

cevap

37

Spring documentation onlar DEBUG düzeyinde günlüğe söylüyor: çıktı şuna benzer

bu sınıfın tarafından verilen tüm SQL kategorisi altında DEBUG seviyesinde kaydedilir

şablon örneğinin tam olarak nitelenmiş sınıf adına karşılık gelen (genellikle JdbcTemplate, ancak JdbcTemplate sınıfının özel bir alt sınıfını kullanıyorsanız farklı olabilir). XML açısından

, şöyle logger şey yapılandırmanız gerekir:

<category name="org.springframework.jdbc.core.JdbcTemplate"> 
    <priority value="debug" /> 
</category> 

Bu konu ancak bir ay önce burada tartışıldı ve hazırda olduğu gibi işe gitmek için kolay değil gibi görünüyor ve/veya beklenen bilgileri vermedi: Spring JDBC is not logging SQL with log4j Bu konunun altında P6Spy kullanımını önerdi, bunlar da this article'a göre Yay'a entegre edilebilirler.

+0

Gerçek SQL sorgularını da görmek için "org.springframework.jdbc" adı olarak kullanın. – Verhagen

1

Genelde, SQL sorgularınızda (parametreli veya değil) JdbcTemplate'e geçeceğinizden,% 100 emin değilim. Eğer PreparedStatement s varsa ve yürütülmekte olan bir bilmiyorsanız, toString yöntem iyi çalışması gerekir. Hazır konu açılmışken Ama, otomatik sorguları log izin yanı sıra bağlı parametreleri her zaman göreceksiniz güzel JDBC logger paketi here var. Çok kullanışlı.

executing PreparedStatement: 'insert into ECAL_USER_APPT 
(appt_id, user_id, accepted, scheduler, id) values (?, ?, ?, ?, null)' 
    with bind parameters: {1=25, 2=49, 3=1, 4=1} 
+1

'PreparedStatement # toString()' ın SQL dizgisi döndürülmesi, JDBC API'sinde hiçbir yerde belirtilmemiş ve bu nedenle bir uygulama detayıdır. Çalışıp çalışmadığı JDBC sürücü yapısına ve/veya sürümüne bağımlısınız. – BalusC

+0

Yorumunuzda http://rkbloom.net/logdriver/ adresine atıfta bulunulan link artık ölü gibi görünüyor. Bu kaydedici hakkında daha fazla bilgi verebilir misiniz - Ebeveyn sitesinde herhangi bir referans bulamıyorum. Teşekkürler – Bob

27

Bu org.springframework.jdbc-3.0.6.RELEASE.jar ile benim için çalışıyor. Ben Bahar dokümanlar bu her yerde (belki de sadece tembelim) bulamadık ama İZ seviyesi büyü yaptığını (deneme yanılma) bulundu.

ben slf4j (1.6.4) ile birlikte log4j-1.2.15 kullanıyorum ve özellikleri log4j yapılandırmak dosyasını: Bu böyle SQL deyimi ve sınır parametreleri hem görüntüler

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

:

Executing prepared SQL statement [select HEADLINE_TEXT, NEWS_DATE_TIME from MY_TABLE where PRODUCT_KEY = ? and NEWS_DATE_TIME between ? and ? order by NEWS_DATE_TIME] 
Setting SQL statement parameter value: column index 1, parameter value [aaa], value class [java.lang.String], SQL type unknown 
Setting SQL statement parameter value: column index 2, parameter value [Thu Oct 11 08:00:00 CEST 2012], value class [java.util.Date], SQL type unknown 
Setting SQL statement parameter value: column index 3, parameter value [Thu Oct 11 08:00:10 CEST 2012], value class [java.util.Date], SQL type unknown 

bilinmeyen bir SQL türü hakkında emin ama (sen bağlı parametre değerlerinin ilgilenen değilseniz yani) sadece bir SQL için buraya

bunu görmezden sanırım değilyeterli olmalı.

+0

Bu benim için çalışmıyor! –

+1

Bence bu jdbc ile çalışabilir, ama jdbctemplate yok. Benim için de çalışmıyor – Emilio

+0

Benim için bu, Spring 4.2.4 ve 'JdbcTemplate' – Marged

5

Parametre değerleri İZ düzeyde basılmış gibi görünüyor.Bu benim için çalıştı:

log4j.logger.org.springframework.jdbc.core.JdbcTem plate=DEBUG, file 
log4j.logger.org.springframework.jdbc.core.StatementCreatorUtils=TRACE, file 

Konsol çıktı:

02:40:56,519 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 1, parameter value [Tue May 31 14:00:00 CEST 2005], value class [java.util.Date], SQL type unknown 
02:40:56,528 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 2, parameter value [61], value class [java.lang.Integer], SQL type unknown 
02:40:56,528 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 3, parameter value [80], value class [java.lang.Integer], SQL type unknown 
+1

jdbcTemplate ve logback ile çalışmaz – Emilio

0

Bu log4j2 ve xml parametreleri ile benim için çalıştı:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="debug"> 
    <Properties> 
     <Property name="log-path">/some_path/logs/</Property> 
     <Property name="app-id">my_app</Property> 
    </Properties> 

    <Appenders> 
     <RollingFile name="file-log" fileName="${log-path}/${app-id}.log" 
      filePattern="${log-path}/${app-id}-%d{yyyy-MM-dd}.log"> 
      <PatternLayout> 
       <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n 
       </pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy interval="1" 
        modulate="true" /> 
      </Policies> 
     </RollingFile> 

     <Console name="console" target="SYSTEM_OUT"> 
      <PatternLayout 
       pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" /> 
     </Console> 
    </Appenders> 
    <Loggers> 

     <Logger name="org.springframework.jdbc.core" level="trace" additivity="false"> 
      <appender-ref ref="file-log" /> 
      <appender-ref ref="console" /> 
     </Logger> 

     <Root level="info" additivity="false"> 
      <appender-ref ref="file-log" /> 
      <appender-ref ref="console" /> 
     </Root> 
    </Loggers> 

</Configuration> 

Sonucu konsol ve dosya günlüğü oldu:

JdbcTemplate - Executing prepared SQL query 
JdbcTemplate - Executing prepared SQL statement [select a, b from c where id = ? ] 
StatementCreatorUtils - Setting SQL statement parameter value: column index 1, parameter value [my_id], value class [java.lang.String], SQL type unknown 

Sadece kopyala/geç

HTH

İlgili konular