[SPRING] spring-mybatis로 봄 부팅 - 모든 SQL 쿼리를 로깅하는 방법
SPRINGspring-mybatis로 봄 부팅 - 모든 SQL 쿼리를 로깅하는 방법
나는 간단한 spring-boot-mybatis 앱을 가지고있다. (명심하자.) Mybatis는 실패한 경우에만 SQL 쿼리를 로깅합니다 (예외적으로). 모든 SQL 쿼리를 콘솔에 로깅하도록 강제하는 방법을 알려주십시오.
이 순간 slf4j 로거 (spring-boot에 의해 자동으로 설정)를 사용하고 있습니다. 나는이 링크를 찾는다 : http://www.mybatis.org/mybatis-3/logging.html 그러나 나는 그것을 따라갈 수 없었다. log4j에 대한 모든 구성 중 첫 번째가 표시되며 잘 모르겠다면 application.properties에서 구성하는 것으로 충분합니까?
미리 감사드립니다.
해결법
-
==============================
1.스프링 부트는 Slf4j의 기본 로깅 공급자로 logback을 사용합니다. Ibatis 내부 로그 팩토리는 첫 번째 선택 로그 작성기로 SLF4j를로드합니다. ibatis 매퍼에 대한 로그 메시지를 게시하도록 스프링 부트 로거를 구성하기 만하면됩니다.
스프링 부트는 Slf4j의 기본 로깅 공급자로 logback을 사용합니다. Ibatis 내부 로그 팩토리는 첫 번째 선택 로그 작성기로 SLF4j를로드합니다. ibatis 매퍼에 대한 로그 메시지를 게시하도록 스프링 부트 로거를 구성하기 만하면됩니다.
부팅 응용 프로그램 속성에 다음 줄을 추가하십시오.
logging.level.org.springframework=WARN logging.level.com.spring.ibatis.UserMapper=DEBUG logging.file=logs/spring-boot-logging.log
두 번째 라인은 DEBUG 로그 레벨을 가진 ibatis 매퍼의 로깅 항목을 정의하는 곳입니다. com.spring.ibatis는 패키지이고 UserMapper는 샘플 매퍼입니다.
다음 로그가 콘솔과 spring-boot-logging 파일에 나타납니다. ApplicationTest 클래스의 saveUser 및 findByName 메소드에서 생성 된 로그 메시지입니다.
2016-12-19 22:07:06.358 INFO 7248 --- [main] com.spring.ibatis.ApplicationTest : Started ApplicationTest in 3.048 seconds (JVM running for 4.209) 2016-12-19 22:07:06.424 DEBUG 7248 --- [main] com.spring.ibatis.UserMapper.saveUser : ==> Preparing: insert into users(name) values(?) 2016-12-19 22:07:06.444 DEBUG 7248 --- [main] com.spring.ibatis.UserMapper.saveUser : ==> Parameters: ibatis(String) 2016-12-19 22:07:06.445 DEBUG 7248 --- [main] com.spring.ibatis.UserMapper.saveUser : <== Updates: 1 2016-12-19 22:07:06.457 DEBUG 7248 --- [main] com.spring.ibatis.UserMapper.findByName : ==> Preparing: select name from users WHERE name=? 2016-12-19 22:07:06.470 DEBUG 7248 --- [main] com.spring.ibatis.UserMapper.findByName : ==> Parameters: ibatis(String) 2016-12-19 22:07:06.504 DEBUG 7248 --- [main] com.spring.ibatis.UserMapper.findByName : <== Total: 1
물론 원하는 로거를 선택할 수 있습니다. 필요한 경우 다른 모든 로거에 대한 예제를 쉽게 추가 할 수 있습니다.
Junit 테스트 케이스로 전체 코드를 https://github.com/saagar2000/ibatis
-
==============================
2.다른 대안은 log4jdbc2와 같은 프록시 드라이버를 사용하는 것입니다.이 유틸리티는 다른 답변과 달리 매개 변수가있는 데이터베이스에 정확한 SQL을 기록하는 이점이 있습니다. 이는 지속성 제거 레이어 (예 : iBatis, JPA 등)에 관계없이 작동합니다.
다른 대안은 log4jdbc2와 같은 프록시 드라이버를 사용하는 것입니다.이 유틸리티는 다른 답변과 달리 매개 변수가있는 데이터베이스에 정확한 SQL을 기록하는 이점이 있습니다. 이는 지속성 제거 레이어 (예 : iBatis, JPA 등)에 관계없이 작동합니다.
https://code.google.com/archive/p/log4jdbc-log4j2/
한 가지 주요 편의점은 SQL을 DB 프론트 엔드에 바로 복사하고 그대로 실행할 수 있다는 것입니다.
1 Maven 종속성 추가 :
<dependency> <groupId>org.bgee.log4jdbc-log4j2</groupId> <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId> <version>1.16</version> </dependency>
2 로그백 구성을 추가하십시오. 관련 부분을 기존 logback.xml에 복사합니다.
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern> </encoder> </appender> <logger name="jdbc.audit" level="ERROR" /> <logger name="jdbc.connection" level="ERROR" /> <logger name="jdbc.sqltiming" level="ERROR" /> <logger name="jdbc.resultset" level="ERROR" /> <!-- UNCOMMENT THE BELOW TO HIDE THE RESULT SET TABLE OUTPUT --> <!--<logger name="jdbc.resultsettable" level="ERROR" /> --> <root level="debug"> <appender-ref ref="STDOUT" /> </root>
3 로깅 설정에 대해 log4jdbc2에 알려주십시오.
Maven 프로젝트의 classpath src / test / resources 또는 src / main / resources의 루트에 log4jdbc.log4j2.properties 파일을 생성하십시오. 이 파일에는 다음과 같은 한 줄이 있습니다.
log4jdbc.spylogdelegator.name = net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
4 아래와 같이 DB 드라이버 클래스와 URL을 변경하십시오.
spring.database.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy #append log4jdbc after jdbc part of the URL: hsql example spring.datasource.url=jdbc:log4jdbc:hsqldb:mem:db_name
SQL 로깅 외에도 실행 된 모든 쿼리의 결과를 표 형식으로 기록합니다. 이것은 샘플 로깅 구성의 주석에 따라 비활성화 할 수 있습니다.
샘플 출력 :
10:44:29.400 [main] DEBUG jdbc.sqlonly - 5. select memberrole0_.member_id as member_i2_12_0_, memberrole0_.id as id1_12_0_, memberrole0_.id as id1_12_1_, memberrole0_.member_id as member_i2_12_1_, memberrole0_.role_id as role_id3_12_1_, role1_.id as id1_17_2_, role1_.name as name2_17_2_ from member_roles memberrole0_ left outer join roles role1_ on memberrole0_.role_id=role1_.id where memberrole0_.member_id=104 10:44:29.402 [main] INFO jdbc.resultsettable - |----------|---|---|----------|--------|---|-----| |member_id |id |id |member_id |role_id |id |name | |----------|---|---|----------|--------|---|-----| |----------|---|---|----------|--------|---|-----|
-
==============================
3.https://softwareengineering.stackexchange.com/questions/108683/slf4j-vs-log4j-which-one-to-prefer
https://softwareengineering.stackexchange.com/questions/108683/slf4j-vs-log4j-which-one-to-prefer
따라서 slf4j 아래에 log4j를 사용하고 있다면 slf4j를 사용하는 경우 log4j 구성을 사용하는 것이 좋습니다.
다음은 log4j 로거에서 slf4j를 사용하는 방법에 대한 설명입니다. http://saltnlight5.blogspot.ca/2013/08/how-to-configure-slf4j-with-different.html
기본적으로 src / main / resources / log4j.properties 속성 파일을 만들고 링크의 내용과 동일하게 구성하면됩니다. 그리고 귀하의 링크가 말한대로 :
따라서 log4j.logger.org.mybatis.example = DEBUG가 속성 파일에 설정되어 있는지 확인하십시오.
from https://stackoverflow.com/questions/41001188/spring-boot-with-spring-mybatis-how-to-force-it-to-logging-all-sql-queries by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring MVC를 사용하여 첫 번째 Hello World 애플리케이션을 만드는 중 오류가 발생했습니다. (0) | 2019.04.20 |
---|---|
[SPRING] Spring 컨트롤러에서 AOP 조언을 통해 RequestMapping 요청을 얻는 방법은 무엇입니까? (0) | 2019.04.20 |
[SPRING] 스프링 MVC 컨트롤러에서 XML 파일 반환 (0) | 2019.04.20 |
[SPRING] Spring LDAP에 LDAP 캐시를 추가하는 방법은 무엇입니까? (0) | 2019.04.20 |
[SPRING] 다른 설정에서 하나의 XML 설정으로 선언 된 스프링 빈을 재정의 할 수 있습니까? (0) | 2019.04.20 |