파일에 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
답변
사용하십시오:
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>
답변
이것은 매우 일반적인 질문 이므로이 답변을 기반으로하는이 기사를 작성
했습니다.
피해야 할 설정
이 설정을 사용하지 않아야합니다.
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)]
답변
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
다음 링크를 참조하십시오.