Как регистрировать операторы SQL в Spring Boot?

Я хочу записывать операторы SQL в файл.
У меня есть следующие свойства в 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

Я вижу SQL-операторы в консоли, но они не отображаются в файле app.log. Файл содержит только основные журналы весны.

Что я должен сделать, чтобы увидеть операторы SQL в файле журнала?

Ответ 1

попробуйте использовать это в вашем файле свойств:

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

Ответ 2

Это также работает для stdout:

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

Для регистрации значений:

spring.jpa.properties.hibernate.type=trace 

Просто добавьте это в application.properties.

Ответ 3

Это работает для меня (YAML):

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

Ответ 4

Пожалуйста, используйте:

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

Ответ 5

если вы hava logback-spring.xml или что-то в этом роде, добавьте к нему следующий код

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

Ответ 6

Для драйвера сервера MS-SQL (драйвер JDBC от Microsoft SQL Server).

попробуйте использовать:

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

в файле application.properties.

Мое личное предпочтение - установить:

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

Вы можете посмотреть эти ссылки для справки:

Ответ 7

Согласно документации это:

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

Ответ 8

Перевод принятого ответа на YAML работает для меня

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

Ответ 9

Если вы хотите просмотреть фактические параметры, используемые для запроса, вы можете использовать

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]

Ответ 10

Мы можем использовать любой из этих в файле application.properties :

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_

Ответ 11

Если у вас возникли проблемы с этим параметром, и кажется, что он работает иногда, а не в других случаях, подумайте, не во время ли он работы во время юнит-тестов.

Многие люди объявляют пользовательские свойства времени тестирования с помощью аннотации @TestPropertySources, объявленной где-то в вашей иерархии наследования тестов. Это заменит все, что вы указали в application.properties или других настройках производственных свойств, так что те значения, которые вы устанавливаете, эффективно игнорируются во время теста.

Ответ 12

Помещение spring.jpa.properties.hibernate.show_sql=true в application.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();
    }