चूंकि यह एक बहुत ही सामान्य प्रश्न है, इसलिए मैंने यह लेख लिखा है
, जिस पर यह उत्तर आधारित है।
से बचने के लिए सेटिंग्स
आपको इस सेटिंग का उपयोग नहीं करना चाहिए:
spring.jpa.show-sql=true
इसके साथ समस्या show-sql
यह है कि SQL स्टेटमेंट कंसोल में प्रिंट किए जाते हैं, इसलिए उन्हें फ़िल्टर करने का कोई तरीका नहीं है, जैसा कि आप सामान्य रूप से लॉगिंग ढांचे के साथ करते हैं।
हाइबरनेट लॉगिंग का उपयोग करना
अपनी लॉग कॉन्फ़िगरेशन फ़ाइल में, यदि आप निम्न लकड़हारा जोड़ते हैं:
<logger name="org.hibernate.SQL" level="debug"/>
फिर, JDBC PreparedStatement
बनाए जाने पर हाइबरनेट SQL स्टेटमेंट्स को प्रिंट करेगा । इसीलिए पैरामीटर प्लेसहोल्डर्स का उपयोग करके स्टेटमेंट लॉग किया जाएगा:
INSERT INTO post (title, version, id) VALUES (?, ?, ?)
यदि आप बाइंड पैरामीटर मानों को लॉग इन करना चाहते हैं, तो बस निम्नलिखित लकड़हारा भी जोड़ें:
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="trace"/>
एक बार जब आप BasicBinder
लकड़हारा सेट करते हैं , तो आप देखेंगे कि बाइंड पैरामीटर मान भी लॉग किए गए हैं:
DEBUG [main]: o.h.SQL - insert into post (title, version, id) values (?, ?, ?)
TRACE [main]: o.h.t.d.s.BasicBinder - binding parameter [1] as [VARCHAR] - [High-Performance Java Persistence, part 1]
TRACE [main]: o.h.t.d.s.BasicBinder - binding parameter [2] as [INTEGER] - [0]
TRACE [main]: o.h.t.d.s.BasicBinder - binding parameter [3] as [BIGINT] - [1]
डेटा स्रोत-प्रॉक्सी का उपयोग करना
डेटा स्रोत-प्रॉक्सी प्रॉक्सी वास्तविक JDBC करने की अनुमति देता DataSource
के रूप में निम्न आरेख से दिखाया गया है:
आप dataSource
बीन को परिभाषित कर सकते हैं जिसका उपयोग हाइबरनेट द्वारा निम्नानुसार किया जाएगा:
@Bean
public DataSource dataSource(DataSource actualDataSource) {
SLF4JQueryLoggingListener loggingListener = new SLF4JQueryLoggingListener();
loggingListener.setQueryLogEntryCreator(new InlineQueryLogEntryCreator());
return ProxyDataSourceBuilder
.create(actualDataSource)
.name(DATA_SOURCE_PROXY_NAME)
.listener(loggingListener)
.build();
}
ध्यान दें कि आपके द्वारा उपयोग किए जा रहे कनेक्शन पूल द्वारा परिभाषित किया actualDataSource
जाना चाहिए ।DataSource
एक बार जब आप सक्षम हो जाते हैं datasource-proxy
, तो SQl स्टेटमेंट निम्नानुसार लॉग होने वाला है:
Name:DATA_SOURCE_PROXY, Time:6, Success:True,
Type:Prepared, Batch:True, QuerySize:1, BatchSize:3,
Query:["insert into post (title, version, id) values (?, ?, ?)"],
Params:[(Post no. 0, 0, 0), (Post no. 1, 0, 1), (Post no. 2, 0, 2)]
logging.level.org.hibernate.type=TRACE