log4jdbc-log4j2설정 (코드로 배우는 스프링 웹 프로젝트)
※ 코드로배우는 스프링 웹 프로젝트를 참고한 정리글
1. log4jdbc-log4j2설정
MyBatis는 JDBC의 PreparedStatement를 이용해서 SQL을 처리한다.
∴ SQL에 전달되는 파라미터는 JDBC에서와 같이 '?'로 치환되어서 처리된다.
복잡한 경우 '?'로 나오는 값이 제대로 되었는지 확인하기가 쉽지 않은데 이 문제를 해결하기 위해서 SQL을 변환해서 PreparedStatement에 사용된 '?'가 어떤 값으로 처리되었는지 확인하는 기능을 추가해보자.
SQL로그를 제대로 보기 위해서 log4jdbc-log4j2 라이브러리를 사용해야 한다.
pom.xml에 라이브러리를 설정한다.
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
라이브러리를 추가한 후에 두 가지 작업을 해야한다.
1. 로그 설정 파일을 추가하는 작업
- 우선 src/main/resources밑에 log4jdbc.log4j2.properties파일을 추가한다.
- 파일 내용은 아래 코드 복붙한다.
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
2. JDBC의 연결 정보를 수정
driverClassName과 jdbcUrl의 value값을 수정하면 된다.
※ 참고 : 여기에 적혀있는 book_ex는 필자가 설정한 db(데이터베이스)의 id와 pw를 말한다.
- 수정하기 전
<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:XE"></property>
<property name="username" value="book_ex"></property>
<property name="password" value="book_ex"></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:XE"></property>
<property name="username" value="book_ex"></property>
<property name="password" value="book_ex"></property>
</bean>
2. 로그의 레벨 설정
테스트코드를 실행하면 많은 양의 로그가 출력되기 때문에 처음 개발할 때는 좋지만 시간이 지나면서 불편하다고 느낄 수 있다.
그래서 로그의 레벨을 이용해서 조금 수정해 줄 필요가 있다.
테스트코드가 실행될 때의 로그와 관련된 설정은 src/test/resources 밑에 log4j.xml을 이용한다.
<logger name="jdbc.audit">
<level value="warn" />
</logger>
<logger name="jdbc.resultset">
<level value="warn" />
</logger>
<logger name="jdbc.connection">
<level value="warn" />
</logger>