启用带有Spring数据的休眠日志记录?

时间:2019-11-04 16:01:41

标签: java

我正在尝试在springboot和springdata应用程序中设置SQL语句的休眠记录。

我在application.properties文件中设置以下属性:

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

但是不知何故它们没有被拾起,也没有SQL日志出现。 也尝试过设置spring.jpa.show-sql属性,但似乎不起作用。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>in.abcd</groupId>
        <artifactId>spring-boot-commons</artifactId>
        <version>1.0.10</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.vladmihalcea</groupId>
        <artifactId>hibernate-types-52</artifactId>
        <version>2.6.1</version>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
        </exclusion>
              <exclusion>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-logging</artifactId>
              </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <version>2.1.6.RELEASE</version>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>jul-to-slf4j</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-to-slf4j</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.1.4.RELEASE</version>
    </dependency>

</dependencies>

2 个答案:

答案 0 :(得分:0)

使用记录器就足够了

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

或者,使用spring.jpa属性,您可以像这样使用它们:

spring.jpa.show-sql = true

另外,为了美化或漂亮地打印SQL,我们可以添加:

spring.jpa.properties.hibernate.format_sql=true

答案 1 :(得分:0)

在声明实体管理器bean的地方,添加以下属性。

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

或在Java批注中

@Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setDataSource(dataSource());
        entityManagerFactoryBean.setPackagesToScan(HIBERNATE_ENTITIES);
        log.info("Created entity manager successfully");
        JpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();

        //Properties to show SQL format of tables on deploy
        Properties jpaProperties = new Properties();
        jpaProperties.put("hibernate.show_sql", true); // Mark as true to log hibernate queries
        jpaProperties.put("hibernate.format_sql", true); // Mark as true to log hibernate queries
        entityManagerFactoryBean.setJpaProperties(jpaProperties);

        entityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter);
        return entityManagerFactoryBean;
    }

编辑:由于您没有使用实体管理器,因此可以直接在配置中执行

    private SessionFactory createSessionFactory(String options) {
      Configuration configuration = new Configuration();
      configuration.setProperty("spring.jpa.properties.hibernate.format_sql", "true");
      configuration.setProperty("hibernate.show_sql", "true");


      StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
          .applySettings(configuration.getProperties());
      SessionFactory sessionFactory = `enter code here`configuration.buildSessionFactory(builder.build());
      return sessionFactory;
    }```