2011-08-25 20 views
6

में तैयार एसक्यूएल स्टेटमेंट लॉगिंग मैं अपने जावा एप्लिकेशन में सभी तैयार एसक्यूएल स्टेटमेंट लॉग करना चाहता हूं। मैं मानक पोस्टग्रेस jdbc ड्राइवर org.postgresql.Driver का उपयोग कर रहा हूँ। इस ड्राइवर में " loglevel" नामक एक पैरामीटर है जिसे 1 (INFO) या 2 (DEBUG) पर सेट किया जा सकता है। बिंदु यह बहुत ज्यादापोस्टग्रेस jdbc ड्राइवर

... 
20:59:05.608 (2) FE=> Bind(stmt=null,portal=null,$1=<'5'>,$2=<'13'>) 
20:59:05.609 (2) FE=> Describe(portal=null) 
20:59:05.609 (2) FE=> Execute(portal=null,limit=1) 
20:59:05.609 (2) FE=> Sync 
20:59:05.648 (2) <=BE ParseComplete [null] 
20:59:05.649 (2) <=BE BindComplete [null] 
20:59:05.649 (2) <=BE NoData 
20:59:05.649 (2) <=BE CommandStatus(UPDATE 1) 
... 

तरह अनुरेखण है वहाँ एक रास्ता केवल बयानों + पैरामीटर लॉग इन करने की है, तो 2 करने के लिए सेट, पैरामीटर यह लगभग कुछ भी नहीं प्रवेश करने है 1 पर सेट है, तो है?

उत्तर

7

आप भाग्यशाली हैं कि आप PostgreSQL का उपयोग कर रहे हैं। PostgreSQL जेडीबीसी ड्राइवर (कम से कम, 8.x या कुछ के बाद) के PreparedStatement कार्यान्वयन के toString() ने इस तरह से ओवरराइड किया है ताकि आप सही स्थान पर भरे सभी पैरामीटर के साथ संपूर्ण SQL कथन देख सकें। तो आप बस की तरह कुछ कर सकता है:

preparedStatement = connection.prepareStatement(sql); 
preparedStatement.setString(1, value1); 
preparedStatement.setString(2, value2); 
// ... 
logger.debug(preparedStatement); // Will show entire SQL with all values. 

+0

मैं ड्राइवर की 9.1 संस्करण में इस दिखाई नहीं दे रहा है (जहां logger सिर्फ अपने लकड़हारा, उदा slf4j/logback या कुछ और है)। – Pointy

+0

9.3 के साथ मेरे लिए काम करता है। –

+0

यदि आपके पास एप्लिकेशन कोड तक पहुंच है, तो हाँ। किसी भी विचार को तीसरे पक्ष के कोड के लिए कथन लॉग कैसे करें जिसे आप नहीं बदल सकते हैं (लेकिन लॉगिंग कॉन्फ़िगर करें)? – Thilo

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