본문 바로가기
Spring/Spring Legacy

Spring Legacy / SQL 로그 설정하기

by LWM 2020. 9. 23.
반응형

MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 SQL을 처리한다. 따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 ?로 치환되어 처리되는데, 이때 만약 복잡한 SQL의 경우 ?로 나오는 값이 제대로 되었는지 확인하기가 쉽지 않아 실행된 SQL의 내용을 정확히 확인하기 어렵다. 이러한 문제를 해결하기 위해서 SQL을 변환해서 PreparedStatement에 사용된 ?가 어떤 값으로 처리되었는지 로그를 통해 확인해보자. SQL 로그를 보기 위해선 log4jdbc-log4j2 라이브러리를 사용해야한다.

 

SQL 로그를 확인하기 위해서는 어떠한 준비가 필요할까? 절차는 다음과 같다.

  1. log4jdbc-log4j2 라이브러리 추가
  2. 로그설정파일 추가
  3. 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 – Custom Log Levels

Copyright © 1999-2020 The Apache Software Foundation. All Rights Reserved. Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, and the Apache Logging project logo are trademarks of The Apache Software Foundation.

logging.apache.org

 

아래 자료는 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>

 

 

반응형