본문 바로가기

학원/복기

[Spring] Mybatis 로깅 정보를 스프링 로그 구현체로 기록하는 방법

Mybatis 프레임워크에서 발생되는 로그 이벤트를 Spring 프레임워크의 로그 구현체로 기록하는 방법

 

1. log4jdbc-log4j2-jdbc4 라이브러리를 프로젝트에 빌드 처리 한다. (메이븐 이용 : pom.xml)

 

https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4/1.16

 

pom.xml

 

 

 

2. DataSoruce 관련 클래스를 Spirng Bean으로 등록한 Spring Bean Configuration File(root-context.xml)에서 bean 엘리먼트의 driverClassName 필드와 url 필드의 값을 변경한다.

 

Mybatis 프레임워크에서 발생되는 로그 이벤트를 전달받아 Spring 프레임워크의 로그 구현체로 기록되도록 driverClassName 필드값과 url 필드의 값을  log4jdbc-log4j2-jdbc4 라이브러리에서 제공하는 값으로 변경해준다.

 

root-context.xml

<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
	<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"/>
	<property name="url" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:xe"/>
	<property name="username" value="scott"/>
	<property name="password" value="tiger"/>
</bean>

 

3. [src/main/resource] 폴더에 [log4jdbc.log4j2.properties] 파일을 작성한다.

  • Mybatis 프레임워크에서 발생되는 로그 이벤트를 Spring 프레임워크의 로그 구현체에게 제공하기 위한 Delegator 클래스를 지정하기 위한 파일이다.

 

log4jdbc.log4j2.properties

log4jdbc.spylogdelegator.name = net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

 

 

4.  SpyLogDelegator 객체에 의해 발생된 로그 이벤트를 Spring 프레임워크의 로그 구현체로 기록되도록 환경설정파일을 변경해준다. - log4j.xml : logger 엘리먼트 추가 

 

SpyLogDelegator 객체에 의해 발생된 로그 이벤트를 기록하기 위한 logger 엘리먼트를 등록

 

log4j.xml

	<!-- jdbc.sqlonly : 완성된 SQL 명령 기록 -->
	<logger name="jdbc.sqlonly">
		<level value="info"/>
	</logger>
	
	<!-- jdbc.sqltiming : SQL 명령의 실행시간(ms) 기록 -->
	<logger name="jdbc.sqltiming">
		<level value="info"/>
	</logger>
	
	<!-- jdbc.audit : ResultSet 관련 매핑정보를 제외한 모든 JDBC 관련 정보 기록 -->
	<logger name="jdbc.audit">
		<level value="info"/>
	</logger>
	
	<!-- jdbc.resultset : ResultSet 관련 매핑정보를 포함한 모든 JDBC 관련 정보 기록 -->
	<!-- 
	<logger name="jdbc.resultset">
		<level value="info"/>
	</logger>
	 -->
	 
	<!-- jdbc.resultsettable : ResultSet 관련 매핑정보를 표(Table)형식으로 기록 -->
	<logger name="jdbc.resultsettable">
		<level value="info"/>
	</logger>
	
	<!-- jdbc.connection : Connection 객체 관련 정보 기록 - Open 또는 Close -->
	<logger name="jdbc.connection">
		<level value="info"/>
	</logger>