Log4j로 검색한 결과 :: 시소커뮤니티[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

회원가입 I 비밀번호 찾기


SSISO Community검색
SSISO Community메뉴
[카페목록보기]
[블로그등록하기]  
[블로그리스트]  
SSISO Community카페
블로그 카테고리
정치 경제
문화 칼럼
비디오게임 스포츠
핫이슈 TV
포토 온라인게임
PC게임 에뮬게임
라이프 사람들
유머 만화애니
방송 1
1 1
1 1
1 1
1 1
1

Log4j로 검색한 결과
등록일:2008-06-11 10:38:45
작성자:
제목:[Spring + iBatis] 바인딩된 sql 문 로깅하기


[Spring + iBatis] 바인딩된 sql 문 로깅하기
Log4j 를 쓴다면

  • Log4j.logger.java.sql.Connection=DEBUG
  • Log4j.logger.java.sql.Statement=DEBUG
  • Log4j.logger.java.sql.PreparedStatement=DEBUG
  • Log4j.logger.java.sql.Resultset=DEBUG

라고 Log4j 설정파일에 추가해주는 것으로 처리 가능합니다만.. (물론 저 DEBUG 값을 그대로 쓰기 보다는 빌드시, 개발자 PC냐, 개발 서버냐, 운영 서버냐에 따라 달라지도록 해야겠죠)

한가지 단점이 있다면 바인딩된 결과가 아닌 '?' 가 들어있는 sql 문과, 바인드 될 파라미터 값들의 따로 보여준다는 것이 단점이라면 단점일 것입니다..

그래서!!! 두둥~~ 해결책을 찾아본 결과 p6spy 라는 것이 있더군요. JDBC 드라이버를 Wrapping 함으로써 바인드까지 된 sql 문을 볼 수 있게 해줍니다.

자.. 그럼 이걸 spring 과 ibatis 를 쓰는 환경에서는 어떻게 써 먹을 까요??? (참고로 제가 진행 중인 프로젝트는 JNDI Name 으로 DataSource 를 얻어옵니다.

(1) p6spy.jar 파일을 WEB-INF/lib 디렉터리에 복사합니다. (혹은 jdk 나 was 의 lib 디렉터리에 복사해도 됩니다)
(2) spring 설정 파일에서

    <bean id="conaDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="MYDSXA" />
    </bean>
    라고 된 부분을 (당연히 jndiname 은 다르겠죠.)
 
   <bean id="conaDataSource" class="com.p6spy.engine.spy.P6DataSource">
        <constructor-arg>
            <ref local="conaDataSourceTarget"/>
        </constructor-arg>
    </bean>

    <bean id="conaDataSourceTarget" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="MYDSXA" />
    </bean>
    와 같이 변경해 줍니다.




(3) spy.properties 파일을 클래스 패스 (예를 들어 WEB-INF/classes) 로 인식되는 곳에 위치 시킨 후 다음의 내용을 입력합니다.

module.log=com.p6spy.engine.logging.P6LogFactory

realdriver=oracle.jdbc.driver.OracleDriver

executionthreshold=
outagedetection=false
outagedetectioninterval=
filter=false
include     =
exclude     =
sqlexpression =
autoflush   = true
dateformat=
includecategories=info, statement, commit, rollback
excludecategories=debug,result,batch,resultset,prepared

stringmatcher=
stacktraceclass=

reloadproperties=false
reloadpropertiesinterval=60
deregisterdrivers = true
useprefix=false

appender=com.p6spy.engine.logging.appender.FileLogger
logfile     = C:/logs/sql.log

append=true
  was 를 재기동 하면 그다음 부터는 원하는 결과를 쭉쭉 볼 수 있답니다.

======== patch

1.3 이후 릴리즈가 없죠. 만드시던 분이 사정이 생기셨는지.. 암튼.. 1.3 버전의 치명적인 에러는 설정을 어떻게 하던 resultset 에 대한 로그를 남긴다는 겁니다. 로그 파일 순식간에 커지죠.. 따라서 패치를 해줘야 합니다.

p6spy-src 파일을 다운로드 받고 압축을 해제한 후 첨부한 패치 파일을 P6LogQuery.java com/p6spy/engine/common 에 복사합니다.(같은 이름의 파일이 있으니 덮어쓰시면 됩니다)

다음으로 압축을 해제한 디렉터리(build.xml 파일이 있는 디렉터리에) lib 디렉터리를 생성하시고 다음의 라이브러리 파일들을 복사하여 넣습니다..

junit.org : http://www.junit.org
jakarta-regexp-1.4.jar : http://jakarta.apache.org/regexp/
Gnu Regexp : http://www.cacas.org/java/gnu/regexp/ gnu.regexp-1.1.4.tar.gz (해당 파일을 구하기 어려운 관계로 첨부합니다)
Log4j : http://jakarta.apache.org/Log4j/
jboss 2.4.6 : http://sourceforge.net/project/showfiles.php?group_id=22866 (이것 역시 2.4.6 버전의 jboss.jar 파일이 필요합니다. 첨부파일을..) jboss.jar
Sun JMX libraries : http://java.sun.com/products/JavaManagement/download.html 참조 구현체 1.2.1 정도면 무난합니다.

제대로 설정했을 경우 lib 디렉터리에는(제가 작업한 2006년 9월 11일 기준으로)

jakarta-regexp-1.4.jar, junit.jar, Log4j-1.2.13.jar, gnu-regexp-1.1.4.jar, jboss.jar, jmxri.jar, jmxtools.jar

와 같은 파일이 있어야 합니다. 물론 jakarta-regexp 및 log4 는 버전이 달라도 상관없습니다.

다 되셨으면 소스 압축을 푼 디렉터리에서 ant 를 실행시킵니다. 그러면 dist 디렉터리에 p6spy.jar 파일이 생성됩니다.

출처 : Tong - 반이오타님의 JAVA Framework통