이것은 매우 일반적인 질문 이므로이 답변을 기반으로하는이 기사를 작성
했습니다.
피해야 할 설정
이 설정을 사용하지 않아야합니다.
spring.jpa.show-sql=true
문제 show-sql
는 콘솔에 SQL 문이 인쇄되므로 일반적으로 로깅 프레임 워크에서와 같이 필터링 할 수있는 방법이 없습니다.
최대 절전 모드 로깅 사용
로그 구성 파일에서 다음 로거를 추가하면
<logger name="org.hibernate.SQL" level="debug"/>
그런 다음, Hibernate는 JDBC PreparedStatement
가 작성 될 때 SQL 문을 인쇄합니다 . 이것이 매개 변수 자리 표시자를 사용하여 명령문이 기록되는 이유입니다.
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]
datasource-proxy 사용
데이터 소스 프록시는 프록시 실제 JDBC로 할 수 있습니다 DataSource
다음 다이어그램에 의해 도시 된 바와 같이 :
dataSource
Hibernate에 의해 사용될 bean을 다음과 같이 정의 할 수있다 :
@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
하면 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.type=TRACE