Spring을 사용해서 개발을 하다보면 페이지에서 실행한 쿼리를 확인하고 싶습니다.
기본적으로 쿼리가 보여지게 되지만 보기에 불편하게 한줄로 나오거나 변수의 매핑이 안된채 출력 됩니다.
아래와 같이 ?(물음표)로 표현됩니다.
SELECT USER_NM, EMAIL FROM USER WHERE USER_ID = ?
물론 Parameters 의 값도 로그에 출력되기 때문에 직접 매핑해야 하지만 갯수가 늘어나면 엄청 귀찮습니다.
그리고 정렬도 XML에 선언한 쿼리문이 출력되지 않고 한줄로 나오기 때문에 보기에도 불편합니다.
위 두가지 불편함을 해결하는 방법을 확인해 보겠습니다.
1. 일단 pom.xml 을 열어서 아래내용을 추가해 줍니다. (로그 출력하는 dependency 추가)
<!-- Sql Log -->
<dependency>
<groupId>org.lazyluke</groupId>
<artifactId>log4jdbc-remix</artifactId>
<version>0.2.7</version>
</dependency>
2. jdbc-config.xml 도 열어줍니다.
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
위 내용을 아래와 같이 변경해 줍니다.
(기존 dataSource를 Log4jdbcProxyDataSource로 한번 감싼다고 생각하시는게 이해하기 좋습니다.)
<bean id="dataSourceSpied" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</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>
<!-- SQL Logger -->
<!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds) -->
<logger name="jdbc.sqltiming" additivity="false">
<level value="warn" />
<appender-ref ref="console"/>
</logger>
<!-- SQL 쿼리 문장 -->
<logger name="jdbc.sqlonly" additivity="false">
<level value="info"/>
<appender-ref ref="console"/>
</logger>
<!-- ResultSet을 제외한 모든 JDBC 호출 정보 -->
<logger name="jdbc.audit" additivity="false">
<level value="warn"/>
<appender-ref ref="console"/>
</logger>
<!-- ResultSet을 포함한 모든 JDBC 호출 정보 -->
<logger name="jdbc.resultset" additivity="false">
<level value="warn" />
<appender-ref ref="console"/>
</logger>
<!-- SQL 결과 조회된 데이터의 table을 로그 -->
<logger name="jdbc.resultsettable" additivity="false">
<level value="warn"/>
<appender-ref ref="console"/>
</logger>
위 내용을 간단히 설명하자면
1. 로그 출력하도록 jar 선언 2. 쿼리 실행하는 부분을 새로 선언한 jar 에서 형식에 맞게 로그 출력 3. 쿼리 출력시 보고싶은 정보의 레벨을 설정 |
정상적으로 셋팅이 되었다면 아래와 같이 출력 됩니다.
SELECT USER_NM, EMAIL FROM USER WHERE USER_ID = 3
Spring Api 구축 방식 (0) | 2023.07.06 |
---|---|
Spring REST API 예제 (0) | 2023.03.08 |
스프링 여러 파일 다운로드 (무압축, 다중 다운로드) (3) | 2018.12.27 |
Spring boot 구조 (스프링 부트) (0) | 2018.09.12 |
[Spring] STS Maven 2.5.1 Install 컴파일 에러 (tools.jar) 출처: http://pnot.tistory.com/6 [프로그래밍 노트] (0) | 2018.03.07 |
댓글 영역