दिलचस्प पोस्ट
अजाक्स, बैक बटन और डोम अपडेट आप जावा में दिए गए वर्ग के सभी उप-वर्गों को कैसे ढूंढ सकते हैं? क्या AFNetworking में पृष्ठभूमि का समर्थन है? Google Autocomplete परिणामों को केवल शहर और देश तक सीमित कैसे करें शरीर के चारों ओर मार्जिन स्थान कैसे हटाएं या डिफ़ॉल्ट सीएसएस शैलियों को साफ़ करें उद्देश्य-सी में दो तारीखों की तुलना कैसे करें कैसे एमवीवीएमएलईएल सरलआईओक का उपयोग करें? 'न' और 'इन' कीवर्ड का उपयोग करने के लिए वाक्य रचना का क्रम # 1071 – निर्दिष्ट कुंजी बहुत लंबी थी; अधिकतम कुंजी लंबाई 1000 बाइट्स है iPhone 6 प्लस संकल्प भ्रम: Xcode या ऐप्पल की वेबसाइट? विकास के लिए क्षैतिज अज्ञात चौड़ाई की एक unordered सूची केंद्र कैसे करें? Git में संशोधित (लेकिन प्रतिबद्ध नहीं) फ़ाइलों को अनदेखा करें? वसंत MVC का उपयोग करके पीडीएफ जेनरेट करें सी में एन्यूमरेटेड टाइप (एन्यूम) को कैसे परिभाषित किया जाए? एक ही समाधान में log4net के 2 अलग-अलग संस्करणों का संदर्भ देता है

हाइबरनेट का उपयोग करते समय पैरामीटर मानों के साथ एक क्वेरी स्ट्रिंग कैसे मुद्रित करें

प्रश्न संख्याओं के बजाय वास्तविक मूल्यों के साथ जनरेटेड एसक्यूएल प्रश्नों को मुद्रित करने के लिए सीतनिद्रा में होना संभव है?

अगर हाइबरनेट एपीआई के साथ संभव नहीं है, तो आप वास्तविक मूल्यों के साथ प्रश्नों को मुद्रित करने का सुझाव कैसे देंगे?

वेब के समाधान से एकत्रित समाधान "हाइबरनेट का उपयोग करते समय पैरामीटर मानों के साथ एक क्वेरी स्ट्रिंग कैसे मुद्रित करें"

आपको निम्न श्रेणियों के लिए लॉगिंग को सक्षम करने की आवश्यकता है:

  • org.hibernate.SQL – सभी एसक्यूएल org.hibernate.SQL स्टेटमेंट लॉग इन करने के लिए debug करने के लिए सेट के रूप में वे निष्पादित कर रहे हैं
  • org.hibernate.type – सभी जेडीबीसी पैरामीटर लॉग करने के लिए trace करें

तो एक log4j कॉन्फ़िगरेशन ऐसा दिख सकता है:

 # logs the SQL statements log4j.logger.org.hibernate.SQL=debug # Logs the JDBC parameters passed to a query log4j.logger.org.hibernate.type=trace 

पहला hibernate.show_sql=true विरासत संपत्ति के बराबर है, दूसरा दूसरे चीजों के बीच के बाध्य पैरामीटर को प्रिंट करता है।

एक और समाधान (आधारित हाइबरनेट नहीं) पीडीआई के प्रॉक्सी ड्राइवर जैसे पी 6 स्मार्टफोन का इस्तेमाल करना होगा।

बस सुविधा के लिए, यहां लॉगबैक (SLF4J) के लिए एक समान कॉन्फ़िगरेशन उदाहरण है

 <appender name="SQLROLLINGFILE"> <File>/tmp/sql.log</File> <rollingPolicy> <FileNamePattern>logFile.%d{yyyy-MM-dd}.log</FileNamePattern> </rollingPolicy> <layout> <Pattern>%-4date | %msg %n</Pattern> </layout> </appender> <logger name="org.hibernate.SQL" additivity="false" > <level value="DEBUG" /> <appender-ref ref="SQLROLLINGFILE" /> </logger> <logger name="org.hibernate.type" additivity="false" > <level value="TRACE" /> <appender-ref ref="SQLROLLINGFILE" /> </logger> 

आपके sql.log (उदाहरण) में आउटपुट तब इस तरह दिखता है:

 2013-08-30 18:01:15,083 | update stepprovider set created_at=?, lastupdated_at=?, version=?, bundlelocation=?, category_id=?, customer_id=?, description=?, icon_file_id=?, name=?, shareStatus=?, spversion=?, status=?, title=?, type=?, num_used=? where id=? 2013-08-30 18:01:15,084 | binding parameter [1] as [TIMESTAMP] - 2012-07-11 09:57:32.0 2013-08-30 18:01:15,085 | binding parameter [2] as [TIMESTAMP] - Fri Aug 30 18:01:15 CEST 2013 2013-08-30 18:01:15,086 | binding parameter [3] as [INTEGER] - 2013-08-30 18:01:15,086 | binding parameter [4] as [VARCHAR] - com.mypackage.foo 2013-08-30 18:01:15,087 | binding parameter [5] as [VARCHAR] - 2013-08-30 18:01:15,087 | binding parameter [6] as [VARCHAR] - 2013-08-30 18:01:15,087 | binding parameter [7] as [VARCHAR] - TODO 2013-08-30 18:01:15,087 | binding parameter [8] as [VARCHAR] - 2013-08-30 18:01:15,088 | binding parameter [9] as [VARCHAR] - MatchingStep@com.mypackage.foo 2013-08-30 18:01:15,088 | binding parameter [10] as [VARCHAR] - PRIVATE 2013-08-30 18:01:15,088 | binding parameter [11] as [VARCHAR] - 1.0 2013-08-30 18:01:15,088 | binding parameter [12] as [VARCHAR] - 32 2013-08-30 18:01:15,088 | binding parameter [13] as [VARCHAR] - MatchingStep 2013-08-30 18:01:15,089 | binding parameter [14] as [VARCHAR] - 2013-08-30 18:01:15,089 | binding parameter [15] as [INTEGER] - 0 2013-08-30 18:01:15,089 | binding parameter [16] as [VARCHAR] - 053c2e65-5d51-4c09-85f3-2281a1024f64 

hibernate.cfg.xml को इसमें बदलें:

 <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="use_sql_comments">true</property> 

"Log4j.properties" में log4j और नीचे प्रविष्टियां शामिल करें:

 log4j.logger.org.hibernate=INFO, hb log4j.logger.org.hibernate.SQL=DEBUG log4j.logger.org.hibernate.type=TRACE log4j.appender.hb=org.apache.log4j.ConsoleAppender log4j.appender.hb.layout=org.apache.log4j.PatternLayout 

लॉग 4 जेडीबीसी एक अच्छा समाधान है जो सटीक एसक्यूएल को डाटाबेस में जा रहा है जो कि सबसे ज्यादा लोकप्रिय जवाब के बजाए पैरामीटर में है, जो ये नहीं करता है। इसके एक मुख्य सुविधा यह है कि आप एसक्यूएल की सीधा प्रतिलिपि अपने डीबी फ्रंट-एंड को कॉपी कर सकते हैं और इसे लागू कर सकते हैं।

http://log4jdbc.sourceforge.net/

https://code.google.com/p/log4jdbc-remix/

उत्तरार्द्ध भी क्वेरी परिणाम के एक सारणीबद्ध प्रतिनिधित्व करता है।

नमूना आउटपुट क्वेरीज़ से परिणाम तालिका सेट के साथ एक साथ पैरामीटर के साथ उत्पन्न एसक्यूएल दिखा रहा है:

 5. insert into ENQUIRY_APPLICANT_DETAILS (ID, INCLUDED_IN_QUOTE, APPLICANT_ID, TERRITORY_ID, ENQUIRY_ID, ELIGIBLE_FOR_COVER) values (7, 1, 11, 1, 2, 0) 10 Oct 2013 16:21:22 4953 [main] INFO jdbc.resultsettable - |---|--------|--------|-----------|----------|---------|-------| 10 Oct 2013 16:21:22 4953 [main] INFO jdbc.resultsettable - |ID |CREATED |DELETED |CODESET_ID |NAME |POSITION |PREFIX | 10 Oct 2013 16:21:22 4953 [main] INFO jdbc.resultsettable - |---|--------|--------|-----------|----------|---------|-------| 10 Oct 2013 16:21:22 4953 [main] INFO jdbc.resultsettable - |2 |null |null |1 |Country 2 |1 |60 | 10 Oct 2013 16:21:22 4953 [main] INFO jdbc.resultsettable - |---|--------|--------|-----------|----------|---------|-------| 

2016 का अद्यतन करें

हाल ही में मैं अब log4jdbc-log4j2 ( https://code.google.com/archive/p/log4jdbc-log4j2/ ) SLF4j और लॉगबैक के साथ उपयोग कर रहा हूं। मेरे सेट अप के लिए आवश्यक मेवेन निर्भरता निम्नानुसार हैं:

 <dependency> <groupId>org.bgee.log4jdbc-log4j2</groupId> <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId> <version>1.16</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>$logback.version}</version> </dependency> 

चालक और डीबी यूआरएल तब दिखते हैं जैसे:

 database.driver.class=net.sf.log4jdbc.sql.jdbcapi.DriverSpy database.url=jdbc:log4jdbc:hsqldb:mem:db_name #Hsql database.url=jdbc:log4jdbc:mysql://localhost:3306/db_name #MySQL 

मेरी logback.xml कॉन्फ़िगरेशन फ़ाइल नीचे की तरह दिखती है: यह सभी क्वेरीज़ के लिए पैरामीटर के साथ सभी SQL कथन और सभी क्वेरीज़ के लिए resultset टेबल दिखाता है

 <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern> </encoder> </appender> <logger name="jdbc.audit" level="ERROR" /> <logger name="jdbc.connection" level="ERROR" /> <logger name="jdbc.sqltiming" level="ERROR" /> <logger name="jdbc.resultset" level="ERROR" /> <!-- UNCOMMENT THE BELOW TO HIDE THE RESULT SET TABLE OUTPUT --> <!--<logger name="jdbc.resultsettable" level="ERROR" /> --> <root level="debug"> <appender-ref ref="STDOUT" /> </root> </configuration> 

आखिरकार, मुझे एक लॉग-इन नाम की गई एक फाइल को लॉग-इन 4 jdbc.log4j2.properties को क्लासपाथ जैसे रूट / टेस्ट / रिसोर्सेज या src / main / संसाधनों की रूट पर मेव्न प्रोजेक्ट में बनाना था। इस फाइल में एक पंक्ति है जो नीचे दी गई है:

 log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator 

उपरोक्त आपके लॉगिंग पुस्तकालय पर निर्भर करेगा। अधिक जानकारी के लिए https://code.google.com/archive/p/log4jdbc-log4j2 पर दस्तावेज़ देखें

नमूना आउटपुट:

 10:44:29.400 [main] DEBUG jdbc.sqlonly - org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70) 5. select memberrole0_.member_id as member_i2_12_0_, memberrole0_.id as id1_12_0_, memberrole0_.id as id1_12_1_, memberrole0_.member_id as member_i2_12_1_, memberrole0_.role_id as role_id3_12_1_, role1_.id as id1_17_2_, role1_.name as name2_17_2_ from member_roles memberrole0_ left outer join roles role1_ on memberrole0_.role_id=role1_.id where memberrole0_.member_id=104 10:44:29.402 [main] INFO jdbc.resultsettable - |----------|---|---|----------|--------|---|-----| |member_id |id |id |member_id |role_id |id |name | |----------|---|---|----------|--------|---|-----| |----------|---|---|----------|--------|---|-----| 

आप log4j.xml को श्रेणी पंक्तियां जोड़ सकते हैं:

 <category name="org.hibernate.type"> <priority value="TRACE"/> </category> 

और हाइबरनेट गुण जोड़ें:

 <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="use_sql_comments">true</property> 

वास्तविक org.hibernate.type को प्रश्न चिह्नों से कैसे बाध्य किया जाता है यह देखने के लिए org.hibernate.type लकड़हारा को चालू करें।

स्प्रिंग बूट के मामले में उपयोग किया जा रहा है, बस इसे कॉन्फ़िगर करें:

aplication.yml

 logging: level: org.hibernate.SQL: DEBUG org.hibernate.type: TRACE 

aplication.properties

 logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type=TRACE 

और कुछ नहीं।

HTH

आप डेटा स्रोत-प्रॉक्सी का उपयोग करके इसे कर सकते हैं, जैसा कि मैंने इस पोस्ट में वर्णित किया है।

मान लें कि आपके एप्लिकेशन को datasource-proxy बीन (जैसे @Resource माध्यम से) की उम्मीद है, इस तरह आप datasource-proxy को कॉन्फ़िगर कर सकते हैं:

 <bean id="actualDataSource" class="bitronix.tm.resource.jdbc.PoolingDataSource" init-method="init" destroy-method="close"> <property name="className" value="bitronix.tm.resource.jdbc.lrc.LrcXADataSource"/> <property name="uniqueName" value="actualDataSource"/> <property name="minPoolSize" value="0"/> <property name="maxPoolSize" value="5"/> <property name="allowLocalTransactions" value="false" /> <property name="driverProperties"> <props> <prop key="user">${jdbc.username}</prop> <prop key="password">${jdbc.password}</prop> <prop key="url">${jdbc.url}</prop> <prop key="driverClassName">${jdbc.driverClassName}</prop> </props> </property> </bean> <bean id="proxyDataSource" class="net.ttddyy.dsproxy.support.ProxyDataSource"> <property name="dataSource" ref="testDataSource"/> <property name="listener"> <bean class="net.ttddyy.dsproxy.listener.ChainListener"> <property name="listeners"> <list> <bean class="net.ttddyy.dsproxy.listener.CommonsQueryLoggingListener"> <property name="logLevel" value="INFO"/> </bean> <bean class="net.ttddyy.dsproxy.listener.DataSourceQueryCountListener"/> </list> </property> </bean> </property> </bean> <alias name="proxyDataSource" alias="dataSource"/> 

अब हाइबरनेट उत्पादन बनाम डेटा स्रोत-प्रॉक्सी:

 INFO [main]: ntdlCommonsQueryLoggingListener - Name:, Time:1, Num:1, Query:{[select company0_.id as id1_6_, company0_.name as name2_6_ from Company company0_][]} INFO [main]: ntdlCommonsQueryLoggingListener - Name:, Time:0, Num:1, Query:{[insert into WarehouseProductInfo (id, quantity) values (default, ?)][19]} INFO [main]: ntdlCommonsQueryLoggingListener - Name:, Time:0, Num:1, Query:{[insert into Product (id, code, company_id, importer_id, name, version) values (default, ?, ?, ?, ?, ?)][phoneCode,1,-5,Phone,0]} 

datasource-proxy क्वेरी में पैरामीटर मान होते हैं और आप कस्टम JDBC कथन इंटरसेप्टर्स भी जोड़ सकते हैं ताकि आप अपने एकीकरण परीक्षणों से N + 1 क्वेरी मुद्दों को पकड़ सकें।

अपने log4j या लॉकबैक कॉन्फ़िगरेशन में निम्नलिखित गुण और मूल्य जोड़ें:

 org.hibernate.sql=DEBUG org.hibernate.type.descriptor.sql.BasicBinder=TRACE 
 **If you want hibernate to print generated sql queries with real values instead of question marks.** **add following entry in hibernate.cfg.xml/hibernate.properties:** show_sql=true format_sql=true use_sql_comments=true **And add following entry in log4j.properties :** log4j.logger.org.hibernate=INFO, hb log4j.logger.org.hibernate.SQL=DEBUG log4j.logger.org.hibernate.type=TRACE log4j.appender.hb=org.apache.log4j.ConsoleAppender log4j.appender.hb.layout=org.apache.log4j.PatternLayout 

यह उत्तर सवाल के लिए थोड़ा भिन्नता है। कभी-कभी, हमें रनटाइम में केवल डीबग प्रयोजनों के लिए एसक्यूएल की आवश्यकता होती है उस मामले में, संपादकों पर डिबग का उपयोग करके, एक और आसान तरीका है

  • Org.hibernate.loader.loader.loadEntityBatch पर एक ब्रेकपॉइंट रखें (या वहां तक ​​स्टैक पर नेविगेट करें);
  • जब निष्पादन को निलंबित किया जाता है, तो चर this.sql का मान देखें;

यह हाइबरनेट के लिए है 3. मुझे यकीन नहीं है कि यह काम अन्य संस्करणों पर है।

समाधान सही है लेकिन परिणाम वस्तुओं के लिए सभी बाइंडिंग भी लॉग करता है। इसे रोकने के लिए यह एक अलग एपेन्डर बनाने और फिल्टरिंग सक्षम करने के लिए संभव है, उदाहरण के लिए:

 <!-- A time/date based rolling appender --> <appender name="FILE_HIBERNATE" class="org.jboss.logging.appender.DailyRollingFileAppender"> <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> <param name="File" value="${jboss.server.log.dir}/hiber.log"/> <param name="Append" value="false"/> <param name="Threshold" value="TRACE"/> <!-- Rollover at midnight each day --> <param name="DatePattern" value="'.'yyyy-MM-dd"/> <layout class="org.apache.log4j.PatternLayout"> <!-- The default pattern: Date Priority [Category] Message\n --> <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/> </layout> <filter class="org.apache.log4j.varia.StringMatchFilter"> <param name="StringToMatch" value="bind" /> <param name="AcceptOnMatch" value="true" /> </filter> <filter class="org.apache.log4j.varia.StringMatchFilter"> <param name="StringToMatch" value="select" /> <param name="AcceptOnMatch" value="true" /> </filter> <filter class="org.apache.log4j.varia.DenyAllFilter"/> </appender> <category name="org.hibernate.type"> <priority value="TRACE"/> </category> <logger name="org.hibernate.type"> <level value="TRACE"/> <appender-ref ref="FILE_HIBERNATE"/> </logger> <logger name="org.hibernate.SQL"> <level value="TRACE"/> <appender-ref ref="FILE_HIBERNATE"/> </logger> 

मुझे log4j के लिए यह पसंद है:

 log4j.logger.org.hibernate.SQL=trace log4j.logger.org.hibernate.engine.query=trace log4j.logger.org.hibernate.type=trace log4j.logger.org.hibernate.jdbc=trace log4j.logger.org.hibernate.type.descriptor.sql.BasicExtractor=error log4j.logger.org.hibernate.type.CollectionType=error 

 <appender name="console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" /> </layout> </appender> <logger name="org.hibernate" additivity="false"> <level value="INFO" /> <appender-ref ref="console" /> </logger> <logger name="org.hibernate.type" additivity="false"> <level value="TRACE" /> <appender-ref ref="console" /> </logger> 

सीतनिद्रा में होना 4 और slf4j / log4j2 का उपयोग करते हुए, मैंने अपने log4j2.xml कॉन्फ़िगरेशन में निम्नलिखित को जोड़ने का प्रयास किया:

 <Logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="trace" additivity="false"> <AppenderRef ref="Console"/> </Logger> <Logger name="org.hibernate.type.EnumType" level="trace" additivity="false"> <AppenderRef ref="Console"/> </Logger> 

लेकिन सफलता के बिना

मुझे इस धागे के माध्यम से पता चला है कि सीज़न द्वारा उपयोग किए जाने वाले jboss-logging ढांचे को slf4j के माध्यम से लॉग इन करने के लिए कॉन्फ़िगर किया जाना आवश्यक है मैंने आवेदन के वीएम तर्कों में निम्न तर्क जोड़ा है:

 -Dorg.jboss.logging.provider=slf4j 

और यह एक जादू की तरह काम किया

अगर आप हाइबरनेट 3.2.xx उपयोग का उपयोग कर रहे हैं

 log4j.logger.org.hibernate.SQL=trace 

के बजाय

 log4j.logger.org.hibernate.SQL=debug 

आप इस लॉग इन कर सकते हैं:

 net.sf.hibernate.hql.QueryTranslator 

आउटपुट उदाहरण:

 2013-10-31 14:56:19,029 DEBUG [net.sf.hibernate.hql.QueryTranslator] HQL: select noti.id, noti.idmicrosite, noti.fcaducidad, noti.fpublicacion, noti.tipo, noti.imagen, noti.visible, trad.titulo, trad.subtitulo, trad.laurl, trad.urlnom, trad.fuente, trad.texto from org.ibit.rol.sac.micromodel.Noticia noti join noti.traducciones trad where index(trad)='ca' and noti.visible='S' and noti.idmicrosite=985 and noti.tipo=3446 2013-10-31 14:56:19,029 DEBUG [net.sf.hibernate.hql.QueryTranslator] SQL: select noticia0_.NOT_CODI as x0_0_, noticia0_.NOT_MICCOD as x1_0_, noticia0_.NOT_CADUCA as x2_0_, noticia0_.NOT_PUBLIC as x3_0_, noticia0_.NOT_TIPO as x4_0_, noticia0_.NOT_IMAGEN as x5_0_, noticia0_.NOT_VISIB as x6_0_, traduccion1_.NID_TITULO as x7_0_, traduccion1_.NID_SUBTIT as x8_0_, traduccion1_.NID_URL as x9_0_, traduccion1_.NID_URLNOM as x10_0_, traduccion1_.NID_FUENTE as x11_0_, traduccion1_.NID_TEXTO as x12_0_ from GUS_NOTICS noticia0_ inner join GUS_NOTIDI traduccion1_ on noticia0_.NOT_CODI=traduccion1_.NID_NOTCOD where (traduccion1_.NID_CODIDI='ca' )and(noticia0_.NOT_VISIB='S' )and(noticia0_.NOT_MICCOD=985 )and(noticia0_.NOT_TIPO=3446 ) 

Log4Jdbc प्लगइन आपकी आवश्यकता के लिए सर्वोत्तम होगा। यह निम्न-

 1. Complete SQL query being hit to the db 2. Parameter values being passed to the query 3. Execution time taken by each query 

Log4Jdbc- को कॉन्फ़िगर करने के लिए नीचे दिए गए लिंक को देखें

 https://code.google.com/p/log4jdbc/ 

लॉगिंग कार्य करता है लेकिन वास्तव में आप नहीं चाहते हैं या मैं कुछ समय पहले चाहता था, लेकिन P6Spy पूरी तरह से काम करता है ,

यहां P6Spy के लिए MKYong ट्यूटोरियल को लागू करने के लिए सरल ट्यूटोरियल है।

मेरे लिए यह आकर्षण की तरह काम करता है

  1. P6Spy पुस्तकालय डाउनलोड करें

"P6spy-install.jar" प्राप्त करें

  1. इसे निकालें

p6spy-install.jar फ़ाइल को निकालें, p6spy.jar और spy.properties

  1. लाइब्रेरी निर्भरता जोड़ें

अपनी परियोजना पुस्तकालय निर्भरता में p6spy.jar जोड़ें

  1. P6Spy गुण फ़ाइल को संशोधित करें

अपने डेटाबेस कॉन्फ़िगरेशन फ़ाइल को संशोधित करें आपको अपने मौजूदा जेडीबीसी चालक को P6Spy जेडीबीसी ड्राइवर के साथ बदलने की ज़रूरत है – com.p6spy.engine.spy.P6SpyDriver

मूल है MySQL JDBC ड्राइवर – com.mysql.jdbc.Driver

 <session-factory> <property name="hibernate.bytecode.use_reflection_optimizer">false</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.password">password</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mkyong</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> </session-factory> 

इसे पी 6 स्मार्टफोन जेडीबीसी चालक – com.p6spy.engine.spy.P6SpyDriver

 <session-factory> <property name="hibernate.bytecode.use_reflection_optimizer">false</property> <property name="hibernate.connection.driver_class">com.p6spy.engine.spy.P6SpyDriver </property> <property name="hibernate.connection.password">password</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mkyong</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> </session-factory> 
  1. P6Spy गुण फ़ाइल को संशोधित करें P6Spy गुण फ़ाइल को संशोधित करें – spy.properties

real driver को अपने मौजूदा MySQL JDBC ड्राइवर के साथ बदलें

 realdriver=com.mysql.jdbc.Driver #specifies another driver to use realdriver2= #specifies a third driver to use realdriver3= 

लॉग फ़ाइल स्थान बदलें लॉगफाइल प्रॉपर्टी में लॉग फ़ाइल स्थान बदलें, सभी SQL कथन इस फ़ाइल में प्रवेश करेंगे।

विंडोज

 logfile = c:/spy.log 

* nix

 logfile = /srv/log/spy.log 
  1. “spy.properties” को प्रोजेक्ट करने के लिए “spy.properties” कॉपी करें

अपने प्रोजेक्ट रूट फ़ोल्डर में “spy.properties” कॉपी करें, सुनिश्चित करें कि आपका प्रोजेक्ट "spy.properties" का पता लगा सकता है, अन्यथा यह “spy.properties” फ़ाइल को अपवाद नहीं पाया जाएगा।

वॉरहार्क या कुछ इसी तरह का प्रयोग करें:

उपरोक्त उत्तरदायी उत्तर में कोई भी पैरामीटर ठीक से पैरामीटर के साथ प्रिंट नहीं करेगा या दर्द हो सकता है। मैंने इसे वायरशर्क का उपयोग करते हुए प्राप्त किया, जो सभी एसक्यूएल / आदेशों को आवेदन से ओरेकल / मैक्सकल आदि के लिए भेजता है।

 <!-- A time/date based rolling appender --> <appender name="FILE" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="logs/system.log" /> <param name="Append" value="true" /> <param name="ImmediateFlush" value="true" /> <param name="MaxFileSize" value="200MB" /> <param name="MaxBackupIndex" value="100" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %d{Z} [%t] %-5p (%F:%L) - %m%n" /> </layout> </appender> <appender name="journaldev-hibernate" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="logs/project.log" /> <param name="Append" value="true" /> <param name="ImmediateFlush" value="true" /> <param name="MaxFileSize" value="200MB" /> <param name="MaxBackupIndex" value="50" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %d{Z} [%t] %-5p (%F:%L) - %m%n" /> </layout> </appender> <logger name="com.journaldev.hibernate" additivity="false"> <level value="DEBUG" /> <appender-ref ref="journaldev-hibernate" /> </logger> <logger name="org.hibernate" additivity="false"> <level value="INFO" /> <appender-ref ref="FILE" /> </logger> <logger name="org.hibernate.type" additivity="false"> <level value="TRACE" /> <appender-ref ref="FILE" /> </logger> <root> <priority value="INFO"></priority> <appender-ref ref="FILE" /> </root> 

यहां दिए गए सभी उत्तर उपयोगी होते हैं, लेकिन यदि आप अपने सत्र फ़ैक्टरी को सेटअप करने के लिए स्प्रिंग एप्लिकेशन संदर्भ एक्सएमएल का उपयोग कर रहे हैं, तो log4j एसक्यूएल स्तरीय चर सेट करने से आपको केवल उसी तरीके का हिस्सा मिल जाता है, आपको हाइबरनेट.शो_एसएसीएल वैरिएबल को सेट करना पड़ता है वास्तव में मूल्यों को प्रदर्शित करने के लिए हाइबरनेट प्राप्त करने के लिए एप्लिकेशन संदर्भ में स्वयं।

ApplicationContext.xml में है:

 <property name="hibernateProperties"> <value> hibernate.jdbc.batch_size=25 ... <!-- Other parameter values here --> hibernate.show_sql=true </value> </property> 

और आपके लॉग 4 जे फाइल की जरूरत है

 log4j.logger.org.hibernate.SQL=DEBUG 

mysql jdbc ड्राइवर पहले से ही इस आवश्यकता को पूरा करने के लिए एक सुविधाजनक प्रदान कर चुका है, आपको कम से कम जार संस्करण> = mysql-connect-jar-5.1.6.jar होना चाहिए

चरण 1: [लॉगडर और कस्टम लॉगिंग जोड़ने के लिए अपने jdbc.url को कॉन्फ़िगर करें]

  jdbc.url=jdbc:mysql://host:port/your_db?logger=com.mysql.jdbc.log.Slf4JLogger&profileSQL=true&profilerEventHandler=com.xxx.CustomLoggingProfilerEventHandler 

अब, यह slf4j लॉगिंग का उपयोग कर रहा है, यदि आपका डिफ़ॉल्ट लॉगिंग log4j है, तो आपको slf4j-api, slf4j-log4j12 निर्भरता को slf4j लॉगिंग का उपयोग करना होगा

चरण 2: [अपनी कस्टम लॉगिंग लिखें]

 package com.xxx; import java.sql.SQLException; import java.util.Properties; import com.mysql.jdbc.Connection; import com.mysql.jdbc.log.Log; public class CustomLoggingProfilerEventHandler implements ProfilerEventHandler { private Log log; public LoggingProfilerEventHandler() { } public void consumeEvent(ProfilerEvent evt) { /** * you can only print the sql as this.log.logInfo(evt.getMessage()) * you can adjust your sql print log level with: DEBUG,INFO * you can also handle the message to meet your requirement */ this.log.logInfo(evt); } public void destroy() { this.log = null; } public void init(Connection conn, Properties props) throws SQLException { this.log = conn.getLog(); } } 

यहां मेरे लिए क्या काम किया गया है, log4j.file में संपत्ति के नीचे सेट करें:

 log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE 

हाइबरनेट गुण सेटिंग्स:

 hibernate.show_sql=true