MyBatis

log4jdbc-log4j2

Jungsoomin :) 2020. 8. 2. 04:37

MyBatis 는 내부적으로 JDBC 의 PreparedStatement를 실행하여 SQL 을 처리한다. 그렇다면 파라미터는 자연스레 ? 로 치환된다는 이야기 같은데.

 

쿼리가 길거나 서브쿼리가 이어질 경우 일일히 MySQL워크벤치나 SQL 디벨로퍼를 열어 확인하는 것을 번거롭다.

 

그렇기에 사용하는게 jdbc 로깅 라이브러리다.

 


<dependency>
	<groupId>org.bgee.log4jdbc-log4j2</groupId>
    	<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
    	<version>1.16</version>
</dependency>

 

해당의존을 설정하고, 해야할 작업은

 

1. 로그 설정파일을 추가한다.

2. JDBC연결정보를 추가한다. 


src/main/resources 폴더에 log4jdbc.log4j2.properties 파일을 작성한다.

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

이제 JDBC 연결정보를 수정하기위해 사용하는 DBCP 의 설정을 했던 DataSource 구현객체의 설정을 바꾼다.

<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />

<property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:XE" />

바꿀 것은 driverClassName 프로퍼티의 값을 net.sf.log4jdbc.sql.jdbcapi.DriverSpy 로 JDBC 드라이버 클래스를 바꾸어 주는 것,

 

JDBC 연결 URL 경로에 log4jdbc 를 추가해주는 것이다.

 

이후 출력 결과를 보면 로그들과 함께 쿼리 결과가 출력되는 것을 확인 할 수 있다.

 


<logger> 태그의 name 속성에 로그 이름을 주며, <level> 태그의 value 속성에 로그 레벨을 정해주면 레벨에 따라 로그를 볼 수 있다.

	<!-- log4jdbc-log4j2 -->
	<logger name="jdbc.audit" >
		<level value="warn" />
	</logger>
	
	<logger name="jdbc.resultset" >
		<level value="warn"/>
	</logger>
	
	<logger name="jdbc.connection">
		<level value="warn"/>
	</logger>

	<!-- Root Logger -->
	<root>
		<priority value="info" />
		<appender-ref ref="console" />
	</root>

Log4j 의 DTD 에서 에러가 well-form 되지 않았다는 에러가 날 경우, web의 절대경로로 dtd를 정해준다

<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">