2009-12-19 11 views
38

मैं जेडीबीसी टेम्पलेट और नामांकित पैरामीटर जेडीबीसी टेम्पलेट के चमत्कारों के बारे में सीख रहा हूं। मुझे लगता है कि मैं क्या देखता हूं, लेकिन अंतर्निहित एसक्यूएल को देखने का कोई आसान तरीका है कि यह निष्पादित हो जाता है? मैं इसे डीबग उद्देश्यों के लिए देखना चाहता हूं (उदाहरण के लिए परिणामी एसक्यूएल को बाहरी उपकरण में डीबग करें)।वसंत JdbcTemplate में अंतर्निहित एसक्यूएल देख रहे हैं?

+0

स्पष्टीकरण के लिए, मैं एसक्यूएल को '?' के साथ देखना चाहता हूं यह सुनिश्चित करने के लिए कि पूरी प्रक्रिया सही तरीके से काम करे। – Artem

+0

हाय आर्टम, क्या आपने इसे अपने कोड में प्राप्त किया था? –

उत्तर

37

Spring documentation कहते हैं कि वे डीबग स्तर पर लॉग इन होते हैं: उत्पादन कुछ इस तरह दिखता

इस वर्ग के द्वारा जारी किए गए सभी एसक्यूएल श्रेणी के अंतर्गत डीबग स्तर पर लॉग ऑन है पूरी तरह से योग्य क्लास नाम टेम्पलेट इंस्टेंस (आमतौर पर जेडीबीसी टेम्पलेट) के अनुरूप है, लेकिन यदि आप जेडीबीसी टेम्पलेट क्लास के कस्टम सबक्लास का उपयोग कर रहे हैं तो यह अलग हो सकता है)।

एक्सएमएल संदर्भ में, आप की तरह लकड़हारा कुछ विन्यस्त करने की जरूरत:

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

इस विषय हालांकि यहां एक महीने पहले चर्चा की गई और यह हाइबरनेट में के रूप में काम करने के लिए प्राप्त करने के लिए के रूप में आसान नहीं लगता है और/या यह अपेक्षित जानकारी वापस नहीं लौटा: Spring JDBC is not logging SQL with log4j प्रत्येक विषय के तहत यह विषय P6Spy का उपयोग करने का सुझाव देता है जिसे वसंत में this article के अनुसार भी एकीकृत किया जा सकता है।

+0

असली SQL क्वेरी देखने के लिए "org.springframework.jdbc" नाम के रूप में उपयोग करें। – Verhagen

1

मुझे 100% यकीन नहीं है कि आप क्या प्राप्त कर रहे हैं क्योंकि आमतौर पर आप अपने SQL क्वेरी (पैरामीटर या नहीं) में जेडीबीसी टेम्पलेट में पास करेंगे, इस मामले में आप उन्हें लॉग इन करेंगे। यदि आपके पास PreparedStatement एस है और आप नहीं जानते कि कौन सा निष्पादित किया जा रहा है, तो toString विधि ठीक काम करनी चाहिए। लेकिन जब हम इस विषय पर हैं, तो एक अच्छा जेडीबीसी लॉगर पैकेज here है जो आपको स्वचालित रूप से अपने प्रश्नों को लॉग इन करने के साथ-साथ बाध्य पैरामीटर को हर बार देखने देगा। बहुत उपयोगी।

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

कि 'प्रीपेडस्टेटमेंट # टूस्ट्रिंग()' वापस लौटाएगा एसक्यूएल स्ट्रिंग कहीं भी जेडीबीसी एपीआई में निर्दिष्ट नहीं है और इस प्रकार एक कार्यान्वयन विस्तार है। आप जेडीबीसी चालक बनाने और/या संस्करण पर निर्भर हैं कि यह काम करता है या नहीं। – BalusC

+0

http://rkbloom.net/logdriver/ पर आपकी टिप्पणी में संदर्भित लिंक अब मृत प्रतीत होता है। क्या आप इस लॉगर के बारे में और जानकारी दे सकते हैं - मुझे मूल साइट पर इसका कोई संदर्भ नहीं मिल रहा है। धन्यवाद – Bob

27

यह मेरे लिए org.springframework.jdbc-3.0.6.RELEASE.jar के साथ काम करता है। मुझे स्प्रिंग डॉक्स में कहीं भी यह नहीं मिला (शायद मैं सिर्फ आलसी हूं) लेकिन मुझे पता चला (परीक्षण और त्रुटि) कि ट्रेसी स्तर ने जादू किया था।

मैं log4j-1.2.15 का उपयोग कर रहा slf4j (1.6.4) के साथ-साथ और गुण log4j कॉन्फ़िगर करने के लिए फ़ाइल:

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

यह दोनों SQL विवरण और बाध्य मापदंडों को प्रदर्शित करता है इस तरह:

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 

एसक्यूएल प्रकार के बारे में सुनिश्चित नहीं हैं कि अज्ञात लेकिन मुझे लगता है कि हम इसे यहाँ अनदेखा कर सकते हैं सिर्फ एक एसक्यूएल के लिए

(यानी अगर आप बाध्य पैरामीटर मान में कोई दिलचस्पी नहीं कर रहे हैं) DEBUG पर्याप्त होना चाहिए।

+0

यह मेरे लिए काम नहीं कर रहा है !! –

+1

मुझे लगता है कि यह jdbc के साथ काम कर सकता है, लेकिन कोई jdbctemplate नहीं है। मेरे लिए भी काम नहीं कर रहा है – Emilio

+0

मेरे लिए यह स्प्रिंग 4.2.4 और 'जेडीबीसी टेम्पलेट' – Marged

5

पैरामीटर मान TRACE स्तर पर मुद्रित प्रतीत होते हैं।यह मेरे लिए काम किया:

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

कंसोल आउटपुट:

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

jdbc टेम्पलेट और लॉगबैक के साथ काम नहीं कर रहा है – Emilio

0

यह log4j2 व एक्सएमएल मानकों के साथ मेरे लिए काम किया:

<?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> 

परिणाम कंसोल और फ़ाइल लॉग था:

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 

बस कॉपी/पिछले

एचटीएच

संबंधित मुद्दे