[Spring] 스프링 mybatis 연동 후 실행되는 SQL 구문 로그로 출력하기, log4jdbc-log4j2 설정
지난 글에서 jdbc 연결, Connection pool 연결, mybatis 연결에 대해 알아보았습니다.
https://lifere.tistory.com/117
Spring 프로젝트에서 MyBatis 연결까지 했다면, SQL 처리를 할 준비가 거의 끝난 것인데요. 사실상 본 글은 지난 글에 이어 2편으로 볼수 있는 내용입니다.
log4jdbc-log4j2 설정
Mybatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 SQL을 처리합니다. 따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 '?'로 치환되어서 처리됩니다. 복잡한 SQL의 경우 '?'로 나오는 값이 제대로 되었는지, 실행된 SQL 내용을 정확히 확인하기는 어렵습니다. 이런 문제를 해결하기 위해 SQL을 변환해서 PreparedStatement에 사용된 '?'가 어떤 값으로 처리되었는지 확인하는 기능을 추가하도록 합니다. SQL 로그를 제대로 보기 위해서는 log4jdbc-log4j2 라이브러리를 사용해야 합니다.
pom.xml에 라이브러리를 설정합니다
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
.라이브러리를 추가한 후에는 1) 로그 설정 파일을 추가하는 작업과 2) JDBC의 연결 정보를 수정해야 합니다.
먼저 src/main/resources 폴더 아래 log4jdbc.log4j2.properties 를 생성합니다.
log4jdbc.log4j2.properties 내부 내용을 작성합니다.
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc를 이용하는 경우에 JDBC 드라이버와 URL 정보를 수정해야 합니다. root-context.xml의 일부를 수정합니다.
● 수정 전
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:myoracle"></property>
<property name="username" value="ora_user"></property>
<property name="password" value="hong"></property>
</bean>
● 수정 후
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
<property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:myoracle"></property>
<property name="username" value="ora_user"></property>
<property name="password" value="hong"></property>
</bean>
설정 변경 후 테스트 코드를 실행해보면 이전과 달리 JDBC와 관련된 로그들이 출력되는 것을 볼 수 있습니다.
로그의 레벨 설정
테스트 코드를 실행하면 상당히 많은 양의 로그가 출력되기 때문에 처음 개발할 때는 좋지만 시간이 지나면서 불편하다고 느낄 수 있습니다. 이런 상황에서는 로그의 레벨을 이용해서 조금 수정해 줄 필요가 있습니다.
테스트 코드의 로그 레벨 수정을 위해 src/test/resources 밑 log4j.xml 엽니다. 다음 logger를 등록합니다.
<!-- log4jdbc level -->
<logger name="jdbc.audit">
<level value="warn" />
</logger>
<logger name="jdbc.resultset">
<level value="warn" />
</logger>
<logger name="jdbc.connection">
<level value="warn" />
</logger>
기본 설정 로그는 info 레벨이기 때문에 warn과 같이 좀 더 높은 레벨의 로그만 기록하게 수정합니다.
오늘은 log4jdbc-log4j2 설정 방법에 대해 알아보았습니다.
'java, spring' 카테고리의 다른 글
[Spring framework] 스프링 MVC 설정과 Controller, Model 실습 2 (0) | 2021.05.20 |
---|---|
[Spring framework] 스프링 MVC 설정과 Controller 실습 1 (0) | 2021.05.19 |
[Spring] MyBatis와 스프링 연동하기 1편 (0) | 2021.05.15 |
[Spring] 커넥션 풀(Connection Pool) HikariCP, Java로 설정하기 (0) | 2021.05.14 |
Spring Project에 Connection Pool 설정하기 feat.HikariCP (2) | 2021.05.13 |