본문 바로가기
프로그래밍/Spring

Mybatis & maridb log4jdbc설정 예.

by Mr-후 2020. 2. 5.
반응형

한순간 한순간이 다 학습을 해야하는 순간이 되었다. 갑작스런 입춘 한파로 온 세상이 꽁꽁 얼어붙은 2월 5일. 

오전내내 찾아 헤메이다 점심 먹기전 결정적으로(?) 해결을 한 mybatis 쿼리를 콘솔상에 찍는 설정. 별거 아닌데 모르면 참 헤메이는게 자바 스프링의 환경설정인 듯 하다. 

우선 스프링부트2.x 프로젝트를 만들고 프로퍼티와 xml을 이용해서 프로젝트 환경 설정을 하고 mybatis를 통해 실행되는 쿼리를 눈으로 확인하기 위해서 몇가지 추가 설정을 하는 예이다. 

먼저 의존성 추가. (pom.xml) 

<!-- mariadb connector, client -->
<dependency>
	<groupId>org.mariadb.jdbc</groupId>
	<artifactId>mariadb-java-client</artifactId>
	<scope>provided</scope> 
</dependency>

<!-- log4jdbc 의존성 -->
<dependency>
	<groupId>org.bgee.log4jdbc-log4j2</groupId>
	<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
	<version>1.16</version>
</dependency>

 

다음은 resources 디렉토리 하위에 

 

log4jdbc.log4j2.properties

 

파일을 생성 하고 안에 내용은 다음과 같이 입력 

 

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0

 

다음은 application.properties 파일에 대한 설정이다. 

 

logging.config=classpath:config/logback-spring-dev.xml

spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy

#spring.database.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy

spring.datasource.url=jdbc:log4jdbc:mariadb://127.0.0.1:3306/test?characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=username
spring.datasource.password=userpassword 

 

 

default 설정으로 #spring.database.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy 주석 처리된 문장이 있어 사용했더니 실행 도중 오류가 발생했다. 
java.lang.RuntimeException: Driver org.mariadb.jdbc.Driver claims to not accept jdbcUrl, jdbc:log4jdbc:mariadb:// 

별내용은 아닌데 아마도 드라이버를 찾지 못했다는 오류 같다. 카멜 표현식으로 사용한 부분과 그렇지 않은 부분에 명시된 jdbcapi.DriverSpy에 대한 문제 때문에 한시간 정도 날려 먹은 것 같다. 

마지막으로 logback-spring-dev.xml 에 대한 설정은 다음과 같이 한다. 

 

<configuration debug="true">
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
    
        <logger name="jdbc" level="OFF"/>
    <!-- SQL문만을 로그 -->
    <logger name="jdbc.sqlonly" level="OFF"/>

    <!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보 -->
    <logger name="jdbc.sqltiming" level="DEBUG"/>

    <!-- ResultSet을 제외한 모든 JDBC 호출 정보 -->
    <logger name="jdbc.audit" level="OFF"/>

    <!-- ResultSet을 포함한 모든 JDBC 호출 정보를 로그 -->
    <logger name="jdbc.resultset" level="OFF"/>

    <!-- SQL 결과 조회된 데이터의 table을 로그로 -->
    <logger name="jdbc.resultsettable" level="DEBUG"/>

<!--    <logger name="jdbc.connection" level="OFF"/>-->

    <root level="INFO" additivity="false">
        <appender-ref ref="STDOUT" />
<!--        <appender-ref ref="ROLLING" />-->
    </root>
    
</configuration>

 

이상태로 실행을 하니 쿼리와 resultSet까지 적당한 수준으로 로그가 남게 되어 개발할 때는 편하게 할 수 있을 것 같다.

또 하나의 푸닥거리 끝.

 

 

반응형