반응형
MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 SQL을 처리한다. 따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 ?로 치환되어 처리되는데, 이때 만약 복잡한 SQL의 경우 ?로 나오는 값이 제대로 되었는지 확인하기가 쉽지 않아 실행된 SQL의 내용을 정확히 확인하기 어렵다. 이러한 문제를 해결하기 위해서 SQL을 변환해서 PreparedStatement에 사용된 ?가 어떤 값으로 처리되었는지 로그를 통해 확인해보자. SQL 로그를 보기 위해선 log4jdbc-log4j2 라이브러리를 사용해야한다.
SQL 로그를 확인하기 위해서는 어떠한 준비가 필요할까? 절차는 다음과 같다.
- log4jdbc-log4j2 라이브러리 추가
- 로그설정파일 추가
- JDBC연결
1. log4jdbc-log4j2 라이브러리 추가
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
2. 로그설정파일 추가
src/main/resources 아래에 log4jdbc.log4j2.properties 파일을 추가하고 다음 코드를 작성한다.
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
3. JDBC연결
@Bean
public DataSource dataSource() {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName("net.sf.log4jdbc.sql.jdbcapi.DriverSpy");
hikariConfig.setJdbcUrl("jdbc:log4jdbc:oracle:thin:@localhost:1521:XE");
hikariConfig.setUsername("BOOK_EX");
hikariConfig.setPassword("xxxxxx");
HikariDataSource dataSource = new HikariDataSource(hikariConfig);
return dataSource;
}
!참고
로그의 양이 많으면 개발할 때 불편함을 겪을 수 있다. 따라서 로그의 레벨을 이용하여 로그의 양을 간소화 시킬 필요가 있다. 로그는 레벨에 따라 출력의 양이 달라지므로 로그의 각 레벨에 대한 공부가 필요하다. 로그 레벨에 대한 정보를 보고 싶다면 아래 링크 클릭.
logging.apache.org/log4j/2.x/manual/customloglevels.html
아래 자료는 log4j.xml의 예시 코드이다. 각 영역에 해당하는 로그를 생성하는 이 코드들을 독자가 원하는 레벨에 맞게 설정하여 로그의 양을 컨트롤 하면된다.
//log4jdbc에서 출력되는 로그들에 대한 설정
<logger name="jdbc.audit">
<level value="info" />
</logger>
<logger name="jdbc.resultset">
<level value="info" />
</logger>
<logger name="jdbc.connection">
<level value="info" />
</logger>
//코드가 실행될 때 보여지는 로그에 대한 설정
<root>
<priority value="info" />
<appender-ref ref="console" />
</root>
반응형
'Spring > Spring Legacy' 카테고리의 다른 글
Spring Legacy / MyBatis 연동 및 사용하기 (1) | 2020.09.23 |
---|---|
Spring Legacy / DBCP 설정하기 (0) | 2020.09.15 |
Spring Legacy / JDBC 연결 테스트하기 (0) | 2020.07.30 |
Spring Legacy / 단위 테스트하는 방법 (0) | 2020.07.29 |
Spring Legacy / DI설계 방법 (0) | 2020.07.24 |