다음과 같이 쿼리를 호출하는 녀석이 있다고 해보자.
testMapper.java
public void stringTest() {
String srh = "팝테스트";
String result = sqlSession.selectOne("dao.Inquiry.stringTest", srh);
System.out.println(result);
}
testMapper.xml
<select id="stringTest" parameterType="String" resultType="String">
SELECT BEG_DE
FROM DBTEST.SM_POPUP
WHERE 1 = 1
<if test="_parameter != null and _parameter != ''">
AND POP_SUB = #{_parameter}
</if>
</select>
이 로직을 수행하면 DB에서 값을 가져오고, System.out.println()을 통해 콘솔에 값을 찍어주는데..
조금 더 자세히 로그를 콘솔에 찍어주고 싶다. 그럴 때 설정하는 게 log4j2이다..
그럼 바로 설정해보도록 하자. ( 여기서는 메이븐 기준으로 작성함 )
1. 의존성 추가
pom.xml에 프로젝트 생성시 자동생성되는 의존성을 주석처리하고 새로 의존성을 추가해주도록 하자.
pom.xml
<!-- SQL 로그 출력 -->
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
2. log4j 수정
1) 스프링 프로젝트 생성시 log4j라는 xml파일이 생성 되었을텐데, 이녀석을 수정해야 한다.
파일명을 log4j2.xml로 수정하고
아래 태그들을 추가해준다. ( 로그 레벨 등은 자기가 원하는대로 수정하면 됨 )
<logger name="jdbc.sqlonly" additivity="false">
<level value="info"/>
<appender-ref ref="console"/>
</logger>
<logger name="jdbc.sqltiming" additivity="false">
<level value="warn" />
<appender-ref ref="console"/>
</logger>
<logger name="jdbc.audit" additivity="false">
<level value="warn"/>
<appender-ref ref="console"/>
</logger>
<logger name="jdbc.resultset" additivity="false">
<level value="warn" />
<appender-ref ref="console"/>
</logger>
<logger name="jdbc.resultsettable" additivity="false">
<level value="info"/>
<appender-ref ref="console"/>
</logger>
3. log4jdbc.log4j2.properties 생성
src/main/resources 경로에 log4jdbc.log4j2.properties을 생성하고 아래 코드를 추가한 뒤 저장하도록 하자.
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
4. datasource 코드 수정
root-context나 context-datasource에서 datasource 빈객체를 만드는 부분을 수정하도록 하자.
driverClassName과 URL만 수정해주면 된다.
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
<property name="url" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:xe" />
위는 오라클 기준으로 작성하였다.
driverClassName은 그대로 갖다 쓰도록 하고, URL같은 경우에는 value에 jdbc: 와 db종류(여기서는 oracle)
사이에 log4jdbc만 넣어주면 된다.
이렇게 sql로그가 콘솔에 잘 찍힌다.