IT/Spring

[Spring/eGov] #10 DB 조회 쿼리 및 결과 Console 창에 출력하기 / Log4j2.xml 수정 / 콘솔 로그

외장_하드 2020. 5. 31. 17:13
반응형

 

https://extsdd.tistory.com/114

 

[Spring/eGov] #9 이클립스에서 마리아DB 데이터 Select 과정 디버깅하기 / 디버깅 방법 / Debug / 디버그

https://extsdd.tistory.com/113 [Spring/eGov ] #8 이클립스에서 마리아DB 데이터 조회하기 / MyBatis / 컨트롤러 Controller / 서비스 / DAO / https://extsdd.tistory.com/112 [Spring/eGov ] #7 스프링, 전자..

extsdd.tistory.com

  자 우리가 저번까지 DB에서 데이터를 조회해보고 잘 되는지 확인헀다.

 

 

  하지만 쿼리를 조회하더라도 Console창에 찍히는게 없어서, 실제로 어떤 구문이 실행됐는지, 결과는 나왔는지 알 수가 없어 빠른 분석이 불가능했다.

 

  하지만 Log4j2.xml을 수정해서 쿼리를 조회할때 어떤 쿼리를 조회하는지, 결과는 어떤지 알 수 있게 해보자.

 

1. Log4jdbc-remix 라이브러리 추가

 

 

 

  자 본인 프로젝트에 있는 pom.xml을 열어보자. 저번 시간까지는 그냥 전자정부 프레임워크가 미리 설정해두었던 log4jdbc 라이브러리를 추가해놨었지만, 저 라이브러리 말고 log4j2-remix 라이브러리로 바꿔주자. 위에 나온건 주석처리하고 아래 코드를 그 밑에 추가해주자.

        <dependency>
		    <groupId>org.lazyluke</groupId>
		    <artifactId>log4jdbc-remix</artifactId>
		    <version>0.2.6</version>
		</dependency>

 

 

 

  그럼 위 사진과 같이 변했을 것이다. 기존 lof4jdbc 라이브러리는 주석처리해주고 밑에 새로 log4jbc-remix 라이브러리를 넣어줬당 ㅎㅎ저장을 해주면 라이브러리가 추가된다.

2. log4j2.xml 수정

 

  자 리소스 열기(Ctrl+Shift+R)를 이용해 log4j2.xml 을 열어주자.

 

 

  위와 같은 코드로 작성되어 있을텐데 보면 로그 레벨들이 다 Info위주라 많은 정보들을 안보여주고 있다.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %5p [%c] %m%n" />
        </Console>
    </Appenders>
    <Loggers>
       <Logger name="java.sql" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="egovframework" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
          <!-- log SQL with timing information, post execution -->
        <Logger name="jdbc" level="OFF" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="org.apache.commons.digester" level="ERROR" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
      
         <Logger name="jdbc.sqlonly" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
         <Logger name="jdbc.resultsettable" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="org.springframework" level="INFO" additivity="false">
            <AppenderRef ref="console" />
        </Logger>

        <Logger name="org.springframework.web" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>

        <Root level="DEBUG">
            <AppenderRef ref="console" />
        </Root>
    </Loggers>
</Configuration>

 

  위 코드를 통째로 복붙하고 저장해준다.

 

3. context-datasource.xml 수정

 

  자 리소스 열기(Ctrl+Shift+R)를 이용해 context-datasource.xml을 열어주자.

 

 

  자 데이터 소스가 저렇게 선언되어 있을텐데. 이제 코드를 수정해서 저 dataSource를 가로채서 log4jdbc가 더 상세히 로그를 남길 수 있도록 수정할 것이다.

	<bean id="dataSource_main" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
 		<property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
        <property name="url" value="jdbc:mariadb://127.0.0.1:3306/cp_service_db" />
        <property name="username" value="root"/>
        <property name="password" value="비밀번호"/>
    </bean>
    <bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
		<constructor-arg ref="dataSource_main" />
		<property name="logFormatter">
			<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
				<property name="loggingType" value="MULTI_LINE" />
				<property name="sqlPrefix" value="\n"/>
			</bean>
		</property>
	</bean> 

 

  저 빨간 박스 부분만 드레그해서 위 코드로 바꿔주자.

 

 

  저런식으로 바뀌었을텐데 바뀐걸 보면 기존 dataSource로 id가 할당된 친구를 dataSource_main으로 바꿔줬고, 원래 필요했던 dataSource는 Log4jdbc한테 주고 위에 이름바꿨던 dataSource_main을 참조하는 것을 알 수 있다. 저장해주자!

4. 결과 확인

 

 

  자. 프로젝트를 Clean하고 Debug모드로 서버를 실행하고, 테스트로 http://localhost:8080/reqUrl.do?reqParam=3요청을 해보자.

 

 

 

 

  콘솔 로그를 보면, 1번 박스에 어떤 쿼리를 조회하는지 2번 박스에 실제 ?에 Mapping이 되서 실제로 DB에서 조회되는 쿼리가 먼지, 3번 박스에는 그 쿼리 조회결과는 어떤지가 콘솔창에 찍히게 된다.

 

  만약 요청을 처리할때 조회되는 데이터가 이상하다 싶을때는 어떤 쿼리가 실행되는지, 저 쿼리문을 긁어서 HeidiSql같은 툴로 실제로 DB에서 돌려보고 하면 디버깅 실력이 쑥쑥 늘어날 수 있다.

 

#스프링 #전자정부프레임워크 #데이터베이스 #쿼리 #조회결과 #콘솔 #출력 #Log4j2 #Log4jdbc #결과출력

 

 

 

 

 

 

 

 

 

 

반응형