উত্তর:
আপনাকে নিম্নলিখিত বিভাগগুলির জন্য লগিং সক্ষম করতে হবে :
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 এসপির মতো জেডিবিসি প্রক্সি ড্রাইভার ব্যবহার করা ।
org.hibernate.type.descriptor.sql.BasicBinder
লগার ব্যবহার করতে পারি । org.hibernate.type
আমার জন্য অত্যধিক অপ্রয়োজনীয় তথ্য মুদ্রণ লগ ইন সক্ষম করা ...
org.hibernate.type
এবং org.hibernate.loader.hql
আমার জন্য পরামিতিগুলি দেখানোর জন্য কাজ করবে না
কেবল সুবিধার্থে লগব্যাকের জন্য একই কনফিগারেশন উদাহরণ (এসএলএফ 4 জে)
<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
binding parameter [1] as [VARCHAR] - [1]
।
স্প্রিং বুট ব্যবহারের ক্ষেত্রে কেবল এটি কনফিগার করুন:
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
লগ 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 - |---|--------|--------|-----------|----------|---------|-------|
অতি সম্প্রতি আমি এখন এসএলএফ 4 জে এবং লগব্যাক সহ লগ 4jdbc-log4j2 ( https://code.google.com/archive/p/log4jdbc-log4j2/ ) ব্যবহার করছি। আমার সেট আপের জন্য প্রয়োজনীয় মাভেন নির্ভরতা নীচের মত:
<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
আমার লগব্যাক.এক্সএমএল কনফিগারেশন ফাইলটি নীচের মত দেখাচ্ছে: এটি প্যারামিটারগুলির সাথে সমস্ত এসকিউএল স্টেটমেন্টগুলি এবং সমস্ত প্রশ্নের জন্য ফলাফল সেট টেবিলগুলি আউটপুট করে।
<?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>
পরিশেষে, আমাকে ক্লাসপথের মূল হিসাবে log4jdbc.log4j2.properties নামে একটি ফাইল তৈরি করতে হয়েছিল যেমন মেভন প্রকল্পে src / test / উত্স বা 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>
আপনার লগ 4j বা লগব্যাক কনফিগারেশনে নিম্নলিখিত বৈশিষ্ট্য এবং মান যুক্ত করুন:
org.hibernate.sql=DEBUG
org.hibernate.type.descriptor.sql.BasicBinder=TRACE
org.hibernate.type.descriptor.sql.BasicBinder
বিভাগ সকল প্যারামিটার যেমন enum ধরনের অন্তর্ভুক্ত নয়। সুতরাং আপনি যদি সমস্ত কিছু চান তবে আপনার TRACE
পুরো org.hibernate.type
দলের প্রয়োজন।
আপনি এই পোস্টে বর্ণিত হিসাবে ডেটাসোর্স-প্রক্সি ব্যবহার করে এটি করতে পারেন ।
ধরে নিই আপনার অ্যাপ্লিকেশনটি dataSource
শিমের প্রত্যাশা করে (যেমন মাধ্যমে @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]: n.t.d.l.CommonsQueryLoggingListener - Name:, Time:1, Num:1, Query:{[select company0_.id as id1_6_, company0_.name as name2_6_ from Company company0_][]}
INFO [main]: n.t.d.l.CommonsQueryLoggingListener - Name:, Time:0, Num:1, Query:{[insert into WarehouseProductInfo (id, quantity) values (default, ?)][19]}
INFO [main]: n.t.d.l.CommonsQueryLoggingListener - 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 এর বিবৃতি interceptors খুব যোগ করতে পারেন অধিকার আপনার ইন্টিগ্রেশন পরীক্ষার থেকে n + 1 ক্যোয়ারী সমস্যা ধরা ।
<!-- 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>
সমাধানটি সঠিক তবে ফলাফল অবজেক্টগুলির জন্য সমস্ত বাঁধাই লগ করে। এটি প্রতিরোধের জন্য পৃথক অ্যাপেন্ডার তৈরি করা এবং ফিল্টারিং সক্ষম করা সম্ভব example
<!-- 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>
**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
এই উত্তরটি প্রশ্নের কিছুটা ভিন্নতা। কখনও কখনও, আমাদের কেবল রানটাইমের সময় কেবলমাত্র ডিবাগ উদ্দেশ্যেই স্কয়ার প্রয়োজন। সেক্ষেত্রে সম্পাদকদের ডিবাগ ব্যবহার করে আরও সহজ উপায় রয়েছে।
এটি হাইবারনেট ৩ এর জন্য I'm আমি নিশ্চিত নই যে এটি অন্যান্য সংস্করণে কাজ করে।
mysql jdbc ড্রাইভার ইতিমধ্যে এই প্রয়োজনীয়তাটি পূরণ করার জন্য একটি সুবিধাজনক সরবরাহ করেছে, আপনার অবশ্যই কমপক্ষে জার সংস্করণ> = mysql- সংযোগ-জার -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 এর জন্য এটি পছন্দ করি:
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
লগিং কাজ করে তবে ঠিক আপনি চান না বা আমি কিছু সময় আগে চেয়েছিলাম, কিন্তু পি 6 এসপি পুরোপুরি কাজ করে ,
এখানে বাস্তবায়ন করার জন্য সহজ টিউটোরিয়ালটি রয়েছে পি 6 এসপির জন্য এমকিওয়ং টিউটোরিয়াল ।
আমার জন্য এটি কবজ মত কাজ করে।
পাওয়া "পি 6 স্পাই-ইনস্টল.জার"
p6spy-install.jar
ফাইলটি বের করুন, দেখুনp6spy.jar
এবং দেখুনspy.properties
যোগ p6spy.jar
আপনার প্রকল্পের গ্রন্থাগার নির্ভরতা মধ্যে
আপনার ডাটাবেস কনফিগারেশন ফাইলটি পরিবর্তন করুন। আপনাকে আপনার বিদ্যমান জেডিবিসি ড্রাইভারটিকে পি 6 এসপি জেডিবিসি ড্রাইভারের সাথে প্রতিস্থাপন করতে হবে -com.p6spy.engine.spy.P6SpyDriver
মূল হ'ল মাইএসকিউএল জেডিবিসি ড্রাইভার - 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>
spy.properties
real driver
আপনার বিদ্যমান মাইএসকিউএল জেডিবিসি ড্রাইভারের সাথে প্রতিস্থাপন করুন
realdriver=com.mysql.jdbc.Driver
#specifies another driver to use
realdriver2=
#specifies a third driver to use
realdriver3=
লগ ফাইলের অবস্থান পরিবর্তন করুন লগফাইলে সম্পত্তি লগ ফাইলের অবস্থান পরিবর্তন করুন, সমস্ত এসকিউএল বিবৃতি এই ফাইলে লগইন করবে।
উইন্ডোজ
logfile = c:/spy.log
* স্নো
logfile = /srv/log/spy.log
“spy.properties”
প্রকল্পের ক্লাসপথে অনুলিপি করুন“spy.properties”
আপনার প্রকল্পের রুট ফোল্ডারে অনুলিপি করুন , নিশ্চিত করুন যে আপনার প্রকল্পটি "স্পাই.পোপার্টি" সনাক্ত করতে পারে, অন্যথায় এটি অনুরোধ করবে “spy.properties”
ফাইলটি ব্যতিক্রম পাওয়া যায় নি।
<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 ব্যবহার করে আমি আমার লগ 4j2.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 এর মাধ্যমে লগ করার জন্য কনফিগার করা দরকার to আমি আবেদনের ভিএম যুক্তিতে নিম্নলিখিত যুক্তি যুক্ত করেছি:
-Dorg.jboss.logging.provider=slf4j
এবং এটি একটি কবজ মত কাজ।
লগ 4j.file এ নীচে সম্পত্তি রেখে যা আমার জন্য কাজ করেছে তা এখানে:
log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
হাইবারনেট বৈশিষ্ট্য সেটিংস:
hibernate.show_sql=true
আপনি এটি লগ করতে পারেন:
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 )
লগ 4 জেডিবিসি প্লাগইন আপনার প্রয়োজনের জন্য সেরা হবে। এটি নিম্নলিখিত দেখায়-
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/
ওয়্যারশার্ক বা অনুরূপ কিছু ব্যবহার করুন :
উপরে উল্লিখিত উত্তরের কোনওটিই সঠিকভাবে প্যারামিটারগুলির সাথে স্ক্যাকেল প্রিন্ট করবে না বা কোনও ব্যথা। আমি ওয়্যারশার্ক ব্যবহার করে এটি অর্জন করেছি , যা অ্যাপ্লিকেশন থেকে ওয়ার্কেল / মাইএসকিএল ইত্যাদিতে প্রশ্নের সাথে প্রেরণ করা সমস্ত এসকিএল / কমান্ডগুলি ক্যাপচার করে।
এখানে থাকা সমস্ত উত্তর সহায়ক, তবে আপনি যদি আপনার সেশন কারখানাটি সেট আপ করতে একটি স্প্রিং অ্যাপ্লিকেশন প্রসঙ্গ XML ব্যবহার করেন, লগ 4 জ এসকিউএল স্তর ভেরিয়েবলটি কেবল আপনাকে সেভাবেই অংশ দেয় তবে আপনাকে হাইবারনেট.শো_এসকিএল ভেরিয়েবল সেট করতে হবে have অ্যাপ্লিকেশনের প্রসঙ্গে নিজেই মানগুলি দেখানো শুরু করতে হাইবারনেট পেতে।
অ্যাপ্লিকেশন কনটেক্সট.এক্সএমএল রয়েছে:
<property name="hibernateProperties">
<value>
hibernate.jdbc.batch_size=25
... <!-- Other parameter values here -->
hibernate.show_sql=true
</value>
</property>
এবং আপনার log4j ফাইলের প্রয়োজন
log4j.logger.org.hibernate.SQL=DEBUG
জাভাতে:
আপনার ক্যোয়ারিকে টাইপকুইয়ারিতে রূপান্তর করুন যদি এটি একটি ক্রেটারিয়াকোয়ারী (জাভ্যাক্স.পারস্পেসিটি) থাকে।
তারপর:
query.unwrap (org.hibernate.Query.class) .getQueryString ();
হাইবারনেট কোয়েরি এবং তাদের প্যারামিটার মানগুলি বিভিন্ন লাইনে দেখায়।
যদি আপনি স্প্রিং বুটে অ্যাপ্লিকেশন.প্রপার্টি ব্যবহার করে থাকেন এবং আপনি অ্যাপ্লিকেশন.প্রোপার্টিগুলিতে নীচে হাইলাইটেড প্যারামিটার ব্যবহার করতে পারেন।
org.hibernate.SQL কোয়েরি দেখাবে
org.hibernate.type সমস্ত পরামিতি মানগুলি দেখায়, যা নির্বাচিত, সন্নিবেশ করানো এবং অনুসন্ধানগুলি আপডেট করার সাথে মানচিত্র করবে map logging.level.org.hibernate.type = ট্রেস
org.hibernate.type.EnumType এনাম টাইপ প্যারামিটার মান প্রদর্শন করবে
উদাহরণ ::
2018-06-14 11:06:28,217 TRACE [main] [EnumType.java : 321] Binding [active] to parameter: [1]
sql.BasicBinder পূর্ণসংখ্যা, বার্চর, বুলিয়ান টাইপ প্যারামিটার মান প্রদর্শন করবে
উদাহরণ ::
আমার পক্ষে সহজ সমাধান প্যারামিটার মানগুলি (সরলতার জন্য সমস্ত পরামিতিগুলিকে স্ট্রিং হিসাবে বিবেচনা করে) পরামিতি ইনপুটগুলি প্রতিস্থাপনের জন্য একটি নিয়মিত স্ট্রিংপ্লেস প্রয়োগ করছে:
String debugedSql = sql;
//then, for each named parameter
debugedSql = debugedSql.replaceAll(":"+key, "'"+value.toString()+"'");
//and finnaly
println(debugedSql);
বা অবস্থানগত পরামিতিগুলির জন্য অনুরূপ কিছু (?)।
নাল মান এবং নির্দিষ্ট মানের ধরণের তারিখের মতো যত্ন নিন, আপনি যদি রান রেড এসকিউএল লগ ইন করতে চান তবে।