스프링 Mybatis 로그 이쁘게 출력하기

스프링 Mybatis 로그 이쁘게 출력하기

 

 

1.의존성 추가

마이바티스 쿼리 로그를 이쁘게 출력해주는 라이브러리 의존성을 pom.xml 추가해준다.

	<!-- https://mvnrepository.com/artifact/org.lazyluke/log4jdbc-remix -->
	<dependency>
		<groupId>org.lazyluke</groupId>
		<artifactId>log4jdbc-remix</artifactId>
		<version>0.2.7</version>
	</dependency>

 

2.log4j.xml 수정

log4j.xml 파일 내용을 아래와 같이 작성해 준다.

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration
	xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- Appenders -->
	<appender name="console"
		class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d %5p [%c] %m%n" />
		</layout>
	</appender>
	<appender name="console-infolog"
		class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d %5p %m%n" />
		</layout>
	</appender> <!-- Application Loggers -->
	<logger name="first" additivity="false">
		<level value="debug" />
		<appender-ref ref="console" />
	</logger> <!-- Query Loggers -->
	<logger name="jdbc.sqlonly" additivity="false">
		<level value="INFO" />
		<appender-ref ref="console-infolog" />
	</logger>
	<logger name="jdbc.resultsettable" additivity="false">
		<level value="INFO" />
		<appender-ref ref="console" />
	</logger> <!-- Root Logger -->
	<root>
		<priority value="off" />
		<appender-ref ref="console" />
	</root>
</log4j:configuration>

 

3.sqlSession.xml 파일 수정

db설정하는 부분을 아래와 같이 변경해준다. 변경된점은 기존의 BasicDataSource  Bean 설정태그에서 id를 dataSource 에서 dataSourceSpied로 변경해 주었다. 그리고 새로 추가된 Log4jdbcProxyDataSource 클래스의 bean id를 dataSource로 지정해 주었다. 이 부분을 제외하고 나머지 sqlSessionBean도 참조하는 대상을 dataSource로 그대로 작성해주면된다. 즉, sqlSessionBean 등 기존에 id가 dataSource인 객체를 참조하고 있던 bean들은 참조하던 id를 dataSource 그대로 두면된다는 뜻. 수정할 부분이 없다.

 

Log4jdbcProxyDataSource 가 BasicDataSource를 참조하고, sqlSessionFactoryBean이 Log4jdbcProxyDataSource를 참조하는 그림이 그려진다.

 

3.sqlSessionFactoryBean ===> 2.Log4jdbcProxyDataSource ====> 1.BasicDataSource

 

	<!-- 
		 Data Source 설정 
		 mysql 8.0 부터는 url 에 ?serverTimezone=UTC 넣어야함. 
		 driverClassName 은 com.mysql.cj.jdbc.Driver 
		서드파티가 제공하는 데이터 소스 - Apache Commons DBCP 
	-->
    <bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
     <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
     <property name="url" value="jdbc:mysql://localhost:3306/MYDB?serverTimezone=UTC&amp;useSSL=false"/>
     <property name="username" value="root" />
     <property name="password" value="1111@" /> 
    </bean>



	<!-- 로그이쁘게 -->
	<bean id="dataSource"
		class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
		<constructor-arg ref="dataSourceSpied" />
		<property name="logFormatter">
			<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
				<property name="loggingType" value="MULTI_LINE" />
				<property name="sqlPrefix" value="SQL : " />
			</bean>
		</property>
	</bean>

  
 

	<!-- sqlSessionFactory  -->
	  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	      <property name="dataSource" ref="dataSource" />
	      <property name="configLocation" value="/WEB-INF/spring/sql/mybatis-config.xml"/>
	      <property name="mapperLocations" value="classpath:/META-INF/sql/*.xml" />
	  </bean>
	

 

4.결과

2020-11-23 23:32:07,616  INFO SQL : select LOGIN_ID, PASSWORD, FULL_NAME, DEPT_NAME
             
 from T_USER
             
 where LOGIN_ID = 'user'
2020-11-23 23:32:07,637  INFO [jdbc.resultsettable] |---------|---------|----------|----------|
2020-11-23 23:32:07,637  INFO [jdbc.resultsettable] |LOGIN_ID |PASSWORD |FULL_NAME |DEPT_NAME |
2020-11-23 23:32:07,637  INFO [jdbc.resultsettable] |---------|---------|----------|----------|
2020-11-23 23:32:07,637  INFO [jdbc.resultsettable] |user     |1111     |사용자1      |개발부       |
2020-11-23 23:32:07,637  INFO [jdbc.resultsettable] |---------|---------|----------|----------|