Spring Framework 라이브러리 - log4jdbc-log4j2

업데이트:

log4jdbc-log4j2 라이브러리

SQL 로그를 제대로 보기 위한 라이브러리 등록

MyBtis는 내부적으로 JDBC의 PreparedStatement를 이용해서 SQL을 처리한다. 따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 ‘?’로 치환된다. 이런 문제를 해결하기 위해서 SQL을 변환해서 PreparedStatement에 사용된 ‘?가 어떤 값으로 처리되었는지 확인하는 기능을 추가해야 한다. SQL 로그를 제대로 보기 위해서는 log4jdbc-log4j2 라이브러리를 사용한다.

1. pom.xml 정의

  • dependency 태그로 정의
<!-- SQL 로그를 제대로 보기 위한 라이브러리 : log4jdbc-log4j2 -->
<!-- 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>

2. 로그 설정 파일 추가

라이브러리를 추가한 후 1) 로그 설정 파일을 추가하는 작업과 2) JDBC의 연결 정보를 수정해야 한다.

로그 설정 파일

src/main/resources 밑에 ‘log4jdbc.log4j2.properties‘파일을 추가한다.

log4jdbc

  • properties 파일이 없기 때문에 src/main/resources 우클릭 > New > Other > General > File 에서 확장자를 properties로 직접 입력한다.

  • log4jdbc.log4j2.properties

# properties 파일의 데이터 저장 형식: key=value
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
  • properties 파일에 한글 입력이 되지 않는 경우

    • 파일 우클릭 > properties > Resource > Text file encoding 을 UTF-8로 바꿔준다.

log4jdbc2

  • ‘net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator’ 확인하는 방법

log4jdbc3

3. JDBC 연결 정보 수정

정보 수정

log4jdbc를 이용하는 경우 JDBC 드라이버와 URL 정보를 수정해야 한다.

  • root-context.xml 중 'id=hikariConfig'인 <bean>태그를 수정한다.

수정 전

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
  <property name="jdbcUrl" value="jdbc:oracle:thin:@402-oracle:1521:orcl"></property>
  <property name="username" value="c##java06"></property>
  <property name="password" value="java06"></property>
</bean>

수정 후

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
  <!-- 바로 오라클로 가는 기본 타입
  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
  <property name="jdbcUrl" value="jdbc:oracle:thin:@402-oracle:1521:orcl"></property>
  -->

  <property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
  <!-- DB 접속 정보를 설치한 것에 맞게 변경해 줘야 한다. -> 만약에 11g xe를 설치한 경우 -->
  <property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@402-oracle:1521:orcl"></property>

  <property name="username" value="c##java06"></property>
  <property name="password" value="java06"></property>
</bean>

dataSource() method에서 변경되는 부분은 JDBC 드라이버의 class를 ‘net.sf.log4jdbc.sql.jdbcapi.DriverSpy’로 수정하는 작업과 JDBC 연결 URL 부분에서 중간에 ‘log4jdbc’ 문자열이 추가되는 부분이다. 이 두 설정이 제대로 되어 있지 않으면 데이터베이스의 로그가 정상적으로 기록되지 않는다.

4. System.out.println() 과 Log의 차이

현 시점에서 System.out.println()과 Log는 둘 다 Console 창에서 찍히기 때문에 별 차이가 없다고 느껴지지만 서버를 운용하기 시작한다면 System.out.println()는 console 창에 찍히고, Log는 별도의 text 파일로 저장된다.