spring

log4jdbc-log4j2설정 (코드로 배우는 스프링 웹 프로젝트)

두두(DoDu) 2022. 3. 13. 02:01
반응형

※ 코드로배우는 스프링 웹 프로젝트를 참고한 정리글

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>

 

반응형