DS's『 행복합시다 』

Carpe Programming/ibatis

[ibatis] 로그 이쁘게 보이게하기

nolite 2012. 1. 27. 10:49

출처 : 자카르타 프로젝트.com

iBATIS사용하면서 불편하시분들 가져다 쓰세요 ;

http://www.jakartaproject.com/article/jsptip/119336284359281

iBatis에서 SQL로깅은 한줄로 표현되기 때문에 디버깅이 불편합니다
이를 해결하고자 몇가지 알아봤지만 소스를 직접 수정하는수 밖에 없더군요

I. 소스받기

  • http://www.ibatis.com


II. 소스 수정 리스트

  • com.ibatis.common.jdbc.logging.ConnectionLogProxy.java
  • com.ibatis.common.jdbc.logging.PreparedStatementLogProxy.java
  • com.ibatis.common.jdbc.logging.StatementLogProxy.java
  • com.ibatis.sqlmap.engine.mapping.sql.SqlText.java
  • com.ibatis.sqlmap.engine.mapping.sql.stat.StaticSql.java


1. com.ibatis.common.jdbc.logging.ConnectionLogProxy.java

//log.debug("{conn-" + id + "} Preparing Statement: " + removeBreakingWhitespace((String) params[0]));
log.debug("{conn-" + id + "} Preparing Statement: " + ((String) params[0]));
...
//log.debug("{conn-" + id + "} Preparing Call: " + removeBreakingWhitespace((String) params[0]));
log.debug("{conn-" + id + "} Preparing Call: " + ((String) params[0]));

주석처리 후 removeBreakingWhitespace 함수를 제거합니다
removeBreakingWhitespace 함수가 '\n'를 ' '로 replace 시킵니다

2. com.ibatis.common.jdbc.logging.PreparedStatementLogProxy.java

//log.debug("{pstm-" + id + "} Executing Statement: " + removeBreakingWhitespace(sql));
log.debug("{pstm-" + id + "} Executing Statement: " + (sql));

마찬가지로 removeBreakingWhitespace 함수를 제거합니다

3. com.ibatis.common.jdbc.logging.StatementLogProxy.java

//log.debug("{stmt-" + id + "} Statement: " + removeBreakingWhitespace((String) params[0]));
log.debug("{stmt-" + id + "} Statement: " + ((String) params[0]));

역시나 removeBreakingWhitespace 함수를 제거합니다

4. com.ibatis.sqlmap.engine.mapping.sql.SqlText.java

public void setText(String text) {
//this.text = text.replace('\r', ' ').replace('\n', ' ');
this.text = text;
this.isWhiteSpace = text.trim().length() == 0;
}

replace 하는 부분을 주석처리해 놓고 this.text = text; 를 추가합니다

5. com.ibatis.sqlmap.engine.mapping.sql.stat.StaticSql.java

public StaticSql(String sqlStatement) {
//this.sqlStatement = sqlStatement.replace('\r', ' ').replace('\n', ' ');
this.sqlStatement = sqlStatement;
}

마찬가지로 replace 하는 부분을 주석처리 하고 this.sqlStatement = sqlStatement; 를 추가시킵니다

III. 수동으로 컴파일 후 jar 압축하기
1. 다운받은 ibatis-2.3.0.677 를 압축을 풉니다
2. C:\ibatis-2.3.0.677\src\ibatis-src.zip의 압축을 풉니다
3. C:\ibatis-2.3.0.677\src\ 이하 위의 리스트에 있는 소스를 수정합니다
4. C:\ibatis-2.3.0.677\src\의 수정된 5개의 자바 소스를 C:\ibatis-2.3.0.677\lib\로 카피 합니다
5. C:\ibatis-2.3.0.677\lib\ibatis-2.3.0.677.jar 압축을 풉니다
6. C:\ibatis-2.3.0.677\lib\의 현재 상태입니다


7. cmd 창을 열어 C:\ibatis-2.3.0.677\ 이동 후 컴파일 합니다
javac -classpath "." -d ./ *.java

8. jar 압축 합니다
jar cvf ibatis-2.3.0.677.jar ./

ibatis.jar를 생성후 적용해 보면 한줄로 쭉 나오던 SQL이 아래와 같이 깔끕하게 나옵니다

2007-10-26 10:34:17,328 DEBUG [http-80-Processor24] sql.Connection (JakartaCommonsLoggingImpl.java:27) - {conn-100009} Preparing Statement:
SELECT
COMMON_GB
,COMMON_GB_NM
,USE_YN
,REGISTER_USER
,LAST_UPDATE_USER
,REGISTER_DT
,LAST_UPDATE_DT
FROM CMR_COMMONCD_MAST
ORDER BY COMMON_GB


재생성한 jar파일 첨부합니다

com.ibatis.common.jdbc.logging.* 패키지에 JDBC관련 로깅 java들이 있습니다
ResultSet 로깅등 여러가지 부분들을 수정 할 수 있습니다

728x90

'Carpe Programming > ibatis' 카테고리의 다른 글

[ibatis] 기본 설정  (0) 2012.01.27
[ibatis] 동적 쿼리 생성  (0) 2012.01.27
[ibatis] iterate - 구분자로 검색  (0) 2011.12.16
[ibatis] ddl, alter, create  (0) 2011.12.02
[ibatis] insert 후 key 값 리턴 받기  (0) 2011.09.05