programing

Spring Boot에서 SQL 문을 기록하는 방법

coolbiz 2022. 7. 7. 23:45
반응형

Spring Boot에서 SQL 문을 기록하는 방법

SQL sql sql sql 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 문을 보려면 어떻게 해야 합니까?

속성 파일에서 다음을 사용해 보십시오.

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

이것은 stdout에도 유효합니다.

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.

이 방법은 유효합니다(YAML).

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

피해야 할 설정

다음의 설정은 사용하지 말아 주세요.

spring.jpa.show-sql=true 

show-sqlSQL 문이 콘솔에 인쇄되므로 보통 로깅 프레임워크에서처럼 필터링할 수 없습니다.

휴지 상태 로깅 사용

로그 컨피규레이션파일에서 다음 로거를 추가할 경우:

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

는 의 의 「」, 「」 「」 「JDBC」 「JDBC」 「JDBC」 「JDBC」 「JDBC」 「JDBC」 「JDBC」 「JDBC」 。PreparedStatement플레이스홀더를 됩니다.따라서 다음 파라미터 자리 표시자를 사용하여 문이 기록됩니다.

INSERT INTO post (title, version, id) VALUES (?, ?, ?)

bind 파라미터 값을 로깅하려면 다음 로거도 추가합니다.

<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="trace"/>

[ ] 를 BasicBinder에 기록됩니다.bind bind bind 파 、 bind 파 、 bind parameter logger 。

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]

데이터 소스 프록시 사용

데이터 소스 프록시 OSS 프레임워크에서는 실제 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응용 프로그램에서 사용하는 [연결 풀][2]에 의해 정의됩니다.

다음, '보다 낫다'를 해야 합니다.net.ttddyy.dsproxy.listener에서 「」로debug로그 프레임워크 컨피규레이션파일로 설정합니다.예를 들어 Logback을 사용하는 경우 다음 로거를 추가할 수 있습니다.

<logger name="net.ttddyy.dsproxy.listener" level="debug"/>

「」를 유효하게 ,datasource-proxySQL 음 sql sql sql sql sql sql sql 。

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

사용방법:

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

「 」가 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>

MS-SQL 서버 드라이버(Microsoft SQL Server JDBC 드라이버)의 경우.

사용방법:

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

application.properties 파일에 저장됩니다.

개인 취향은 다음과 같습니다.

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

다음 링크를 참조할 수 있습니다.

YAML에 대한 번역된 답변이 유효합니다.

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

설명서에 따르면 다음과 같습니다.

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

표준 출력에 로그인

§에 application.properties

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

이것은 SQL 쿼리를 인쇄하는 가장 간단한 방법이지만 준비된 문의 매개 변수를 기록하지는 않습니다.또한 최적화된 로깅 프레임워크가 아니기 때문에 권장하지 않습니다.

로깅 프레임워크 사용

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

위의 속성을 지정하면 로그 엔트리가 log-back 또는 log4j 등의 설정된 로그어펜더로 전송됩니다.

질의에 사용된 실제 매개 변수를 보려면 다음을 사용할 수 있습니다.

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]

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_

application.properties 파일에서 다음 코드를 사용합니다.

#Enable logging for config troubeshooting
logging.level.org.hibernate.SQL=DEBUG
logging.level.com.zaxxer.hikari.HikariConfig=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

stdout SQL 쿼리에 대해 application.properties에 다음 행을 추가할 수 있습니다.

spring.jpa.properties.hibernate.show_sql=true

이 설정에 문제가 있어 때로는 동작하지 않는 것처럼 보이는 경우는, 유닛 테스트중에 동작하지 않는 시간을 고려해 주십시오.

이 커스텀 타임 합니다.@TestPropertySources주석은 테스트 상속 계층 내 어딘가에 선언되었습니다. 이, 에, 에, 에, 에, 에, 에, this, this, this, this, this, this, this, this, this, this, this, this, this, this, this, 에 넣는application.properties또는 다른 프로덕션 속성 설정을 사용하여 설정 중인 값이 테스트 시 사실상 무시됩니다.

「 」를 .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();
    }

요.spring.jpa.show-sql=true예를 들어 application.properties에서는 https://github.com/007anwar/ConfigServerRepo/blob/master/application.yaml 를 참조할 수 있습니다.

은 다음과 행을 입니다.application.properties이렇게 하면 실행되는 모든 SQL 쿼리를 기록할 수 있습니다.

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

두 번째 줄은 SQL 문을 아름답게 하기 위해 사용됩니다.

로거를 사용하는 경우는, 다음의 회선을 사용할 수 있습니다.

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

두 번째 줄은 쿼리에 바인딩된 모든 매개 변수를 인쇄하는 데 사용됩니다.이게 너한테 효과가 있길 바라.더 궁금하신 점이 있으시면 연락주세요!

내 말:

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

스프링 부트 버전: 2.3.5풀어주다

속성에 추가합니다.Hibernate Show SQL 인용:

#show sql statement
logging.level.org.hibernate.SQL=debug

#show sql values
logging.level.org.hibernate.type.descriptor.sql=trace

사용하는 JdbcTemplate에 합니다.application.propertiessql 및 파라미터 값을 로그에 기록합니다.

logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG
logging.level.org.springframework.jdbc.core.StatementCreatorUtils=TRACE

언급URL : https://stackoverflow.com/questions/30118683/how-to-log-sql-statements-in-spring-boot

반응형