কিভাবে স্প্রিং বুটে এসকিউএল বিবৃতি লগ ইন?


342

আমি একটি ফাইলে এসকিউএল স্টেটমেন্ট লগ করতে চাই।
আমি নিম্নলিখিত বৈশিষ্ট্য আছেapplication.properties

spring.datasource.url=...
spring.datasource.username=user
spring.datasource.password=1234
spring.datasource.driver-class-name=net.sourceforge.jtds.jdbc.Driver

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

security.ignored=true
security.basic.enabled=false

logging.level.org.springframework.web=INFO
logging.level.org.hibernate=INFO
logging.file=c:/temp/my-log/app.log

আমি যখন আমার অ্যাপ্লিকেশন চালাচ্ছি

cmd>mvn spring-boot:run

আমি কনসোলে স্ক্যালি স্টেটমেন্ট দেখতে পাচ্ছি তবে তারা কোনও ফাইল অ্যাপ.লগে উপস্থিত হয় না। ফাইলটিতে বসন্ত থেকে কেবলমাত্র প্রাথমিক লগ রয়েছে।

লগ ফাইলে এসকিএল স্টেটমেন্ট দেখতে আমার কী করা উচিত?

উত্তর:


458

আপনার বৈশিষ্ট্য ফাইলে এটি ব্যবহার করে দেখুন:

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

74
আপনি যদি logging.level.org.hibernate.type=TRACE
মানগুলিও

2
তবে এই লগগুলি শুধুমাত্র কয়েকটি বাঁধাইয়ের মানগুলি লগ করে। আমি কীভাবে মানদণ্ড-এপিআই থেকে লগ ইন করতে পারি? যদি আমি স্পেসিফিকেশন ব্যবহার করি তবে আমি ক্রেটারিয়াবিল্ডারের সাহায্যে তৈরি বাউন্ড পরামিতিগুলির জন্য কোনও আউটপুট পাব না।
জোশ

204

এটি স্টাডাউটের পক্ষেও কাজ করে:

spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
spring.jpa.properties.hibernate.format_sql=true

মানগুলি লগ করতে:

logging.level.org.hibernate.type=trace

শুধু এটি যুক্ত করুন application.properties


11
আপনি যদি spring.jpa.properties.hibernate.type=trace
মানগুলিও

1
এটি লগ ফাইল করতে লিখেন না, এটি
STDOUT

4
আমি এখনও ?পরামিতিগুলির পরিবর্তে দেখতে পাচ্ছি । সমাধানটি কি সেগুলি আমাকে দেখানোর কথা ছিল?
অ্যাডিন্যাক

1
বসন্ত.jpa.properties.hibernate.type = ট্রেস আমার লগ ফাইল প্রভাবিত করে না; (
gstackoverflow

1
"টাইপ = ট্রেস" কোনও বসন্তের সম্পত্তি নয়, তাই এটি কার্যকর হয় না। স্ট্যাকওভারফ্লো.com/a/41594913/5107365 নীচে প্রদত্ত সমাধানটি এর জন্য সঠিক।
রাজ

97

এটি আমার জন্য (ওয়াইএএমএল) কাজ করে:

spring:
  jpa:
    properties:
      hibernate:
        show_sql: true
        format_sql: true
logging:
  level:
    org:
      hibernate:
        type: trace

18

ব্যবহার করুন:

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type=TRACE
spring.jpa.show-sql=true

4
logging.level.org.hibernate.SQL=DEBUGএটি আমার পক্ষে কাজ করে এবং অন্যান্য উত্তরের জন্য অনুপস্থিত। ধন্যবাদ!
ভিক

18

আপনি যদি লগব্যাক-স্প্রিং.এক্সএমএল বা এর মতো কিছু করেন, তবে এটিতে নীচের কোডটি যুক্ত করুন

<logger name="org.hibernate.SQL" level="trace" additivity="false">
    <appender-ref ref="file" />
</logger>

আমার জন্য কাজ কর.

বাইন্ড ভেরিয়েবলগুলি পেতে:

<logger name="org.hibernate.type.descriptor.sql" level="trace">
    <appender-ref ref="file" />
</logger>

1
স্প্রিং বুটের সাথে আপনাকে ব্যবহার করতে হবে<appender-ref ref="FILE" />
অর্টোমালা লোকনি

অ্যাপেন্ডার রেফার অ্যাপলেন্ডারের নাম যা আপনি লগব্যাক এক্সএমএলে সংজ্ঞায়িত করেছেন। এটি কেবল একটি পরিবর্তনশীল
রাজা আনবাজগান

17

যেহেতু এটি একটি খুব সাধারণ প্রশ্ন, আমি এই নিবন্ধটি লিখেছি , যার ভিত্তিতে এই উত্তরটি ভিত্তিক।

সেটিংস এড়াতে

আপনার এই সেটিংটি ব্যবহার করা উচিত নয়:

spring.jpa.show-sql=true 

সমস্যাটি show-sqlহ'ল এসকিউএল স্টেটমেন্টগুলি কনসোলে মুদ্রিত হয়, সুতরাং এগুলি ফিল্টার করার কোনও উপায় নেই, কারণ আপনি সাধারণত লগিং ফ্রেমওয়ার্কটি করে যাবেন।

হাইবারনেট লগিং ব্যবহার করা

আপনার লগ কনফিগারেশন ফাইলে, আপনি যদি নিম্নলিখিত লগার যুক্ত করেন:

<logger name="org.hibernate.SQL" level="debug"/>

তারপরে, জেবিবিসি তৈরি হওয়ার পরে হাইবারনেট এসকিউএল স্টেটমেন্টগুলি মুদ্রণ করবে PreparedStatement। এজন্য প্যারামিটার স্থানধারক ব্যবহার করে বিবৃতিটি লগ করা হবে:

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, এসকিউএল স্টেটমেন্টটি নীচে লগ হতে চলেছে:

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)]

11

এমএস-এসকিউএল সার্ভার ড্রাইভারের জন্য (মাইক্রোসফ্ট এসকিউএল সার্ভার জেডিবিসি ড্রাইভার)।

ব্যবহার করার চেষ্টা করুন:

logging.level.com.microsoft.sqlserver.jdbc=debug

আপনার application.properties ফাইল এ।

আমার ব্যক্তিগত পছন্দটি সেট করতে হবে:

logging.level.com.microsoft.sqlserver.jdbc=info
logging.level.com.microsoft.sqlserver.jdbc.internals=debug

রেফারেন্সের জন্য আপনি এই লিঙ্কগুলিতে দেখতে পারেন:


8

ডকুমেন্টেশন অনুযায়ী এটি:

spring.jpa.show-sql=true # Enable logging of SQL statements.

আমার বিপরীত সমস্যা আছে, এটি এটিকে মিথ্যা হিসাবে সেট করা হয়েছে, এবং org.hibernate এআরআরওর স্তর এবং এটির এখনও মুদ্রণ ড্রপ / তৈরি / সন্নিবেশ / নির্বাচন করুন
কল্পেশ সনি

5

YAML এর অনুবাদকৃত স্বীকৃত উত্তর আমার পক্ষে কাজ করে

logging:
  level:
    org:
      hibernate:
        SQL:
          TRACE
        type:
          descriptor:
            sql:
              BasicBinder:
                TRACE

3
আপনি যদি একক ব্যবহারের logging.level.org.hibernate.SQL: TRACE logging.level.org.hibernate.type.descriptor.sql.BasicBinder: TRACE
প্রপসের

4

আমরা এপ্লিকেশন.প্রপার্টি ফাইলগুলিতে এর যে কোনও একটি ব্যবহার করতে পারি :

spring.jpa.show-sql=true 

example :
//Hibernate: select country0_.id as id1_0_, country0_.name as name2_0_ from country country0_

অথবা

logging.level.org.hibernate.SQL=debug 

example :
2018-11-23 12:28:02.990 DEBUG 12972 --- [nio-8086-exec-2] org.hibernate.SQL   : select country0_.id as id1_0_, country0_.name as name2_0_ from country country0_

3

আপনি যদি জিজ্ঞাসা করতে ব্যবহৃত প্রকৃত প্যারামিটারগুলি দেখতে চান তবে আপনি ব্যবহার করতে পারেন

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

তারপরে লক্ষ্য করুন যে প্রকৃত প্যারামিটার মানটি দেখানো হয়েছে binding parameter......

   2018-08-07 14:14:36.079 DEBUG 44804 --- [           main] org.hibernate.SQL                        : select employee0_.id as id1_0_, employee0_.department as departme2_0_, employee0_.joining_date as joining_3_0_, employee0_.name as name4_0_ from employee employee0_ where employee0_.joining_date=?
    2018-08-07 14:14:36.079 TRACE 44804 --- [           main] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [TIMESTAMP] - [Tue Aug 07 00:00:00 SGT 2018]

3

স্ট্যান্ডার্ড আউটপুটে লগ ইন করুন

যোগ করা application.properties

### to enable
spring.jpa.show-sql=true
### to make the printing SQL beautify
spring.jpa.properties.hibernate.format_sql=true

এটি প্রস্তুত বিবৃতিগুলির পরামিতিগুলিতে লগ না করে এসকিউএল কোয়েরিগুলি মুদ্রণের সবচেয়ে সহজ উপায়। অপ্টিমাইজড লগিং ফ্রেমওয়ার্কের মতো না হওয়ার কারণে এটির প্রস্তাব দেওয়া হয় না।

লগিং ফ্রেমওয়ার্ক ব্যবহার করে

যোগ করা application.properties

### logs the SQL queries
logging.level.org.hibernate.SQL=DEBUG
### logs the prepared statement parameters
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
### to make the printing SQL beautify
spring.jpa.properties.hibernate.format_sql=true

উপরের বৈশিষ্ট্যগুলি নির্দিষ্ট করে, লগ এন্ট্রি কনফিগার করা লগ অ্যাপেন্ডারে যেমন লগ-ব্যাক বা লগ 4 জে পাঠানো হবে।


0

যদি আপনার এই সেটিংটি নিয়ে সমস্যা হয় এবং এটি কখনও কখনও এবং অন্য সময় নয় বলে মনে হয় - এটি কখন কাজ করে না সেগুলি ইউনিট পরীক্ষার সময়গুলি কিনা তা বিবেচনা করুন।

@TestPropertySourcesআপনার পরীক্ষার উত্তরাধিকারের শ্রেণিবিন্যাসের কোথাও ঘোষিত টিকাশির মাধ্যমে অনেক লোক কাস্টম পরীক্ষার সময় বৈশিষ্ট্যগুলি ঘোষণা করে। এটি আপনার application.propertiesবা অন্যান্য উত্পাদন বৈশিষ্ট্য সেটিংসে আপনি যা কিছু রেখেছেন তা ওভাররাইড করবে যাতে আপনার যে মানগুলি সেট করা হয় তা পরীক্ষার সময় কার্যকরভাবে উপেক্ষা করা হবে।


0

ফেলে spring.jpa.properties.hibernate.show_sql=trueapplication.properties সবসময় সাহায্য করেনি।

আপনি properties.put("hibernate.show_sql", "true");ডাটাবেস কনফিগারেশন বৈশিষ্ট্য যুক্ত করতে চেষ্টা করতে পারেন ।

public class DbConfig {

    @Primary
    @Bean(name = "entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean
    entityManagerFactory(
            EntityManagerFactoryBuilder builder,
            @Qualifier("dataSource") DataSource dataSource
    ) {
        Map<String, Object> properties = new HashMap();
        properties.put("hibernate.hbm2ddl.auto", "validate");
        properties.put("hibernate.show_sql", "true");

        return builder
                .dataSource(dataSource)
                .packages("com.test.dbsource.domain")
                .persistenceUnit("dbsource").properties(properties)
                .build();
    }

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.