DS's『 행복합시다 』

Carpe Programming/ibatis

[log4j] 설정

nolite 2012. 4. 13. 08:32
반응형

http://cafe.naver.com/hermeswing.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=669

Query 서비스를 통해 수행되는 SQL을 로그로 남기기 위해서는 log4jdbc(http://log4jdbc.sourceforge.net/)라는 오픈소스를 활용할 수 있다. log4jdbc는 JDBC 호출이나 SQL문에 대해 로그를 남길 수 있는 JDBC Driver를 제공하고 있다. log4jdbc에 대한 보다 자세한 내용은 http://log4jdbc.sourceforge.net를 참조한다.
다음에서는 log4jdbc를 사용하여 SQL을 로그로 남기기 위한 절차를 5개의 STEP으로 나누어 설명하고자 한다.

http://cafe.naver.com/tlaeowls.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=73&

1. log4j 설치

http://www.apache.org/ - Logging - log4j 1.2 - Download - apache-log4j-1.2.15.zip
파일을 받아 압축풀어 JAR 파일(log4j-1.2.15.jar)을 프로젝트의 \WEB-INF\lib\ 폴더에 넣습니다

2. log4j 설정 - 콘솔 출력

\WEB-INF\classes 에 log4j.properties 파일을 추가합니다

# Global logging configuration - 전역 리포팅 레벨 설정
log4j.rootLogger=ERROR, stdout
# SqlMap logging configuration... - SqlMap 리포팅 레벨 설정
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG

# Console output.. - console 출력 설정
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] -%m%n


log4j.rootLogger=ERROR, stdout
이 내용은 log4j의 리포팅 레벨 기본 설정입니다
ERROR 가 리포팅 레벨이고 stdout은 로그를 남기는 appender 입니다

리포팅 레벨이란 로그를 기록하는 기준?범위?입니다
ERROR 는 에러가 발생했을 경우에만 로그를 남기고
DEBUG 는 항상 로그를 남기게 됩니다.
이것 외에도 여러가지가 있습니다. PDF 파일 참조 Log4jQuickRef.pdf

기본설정을 ERROR 로 하고 현재 SqlMap 관련 리포팅 레벨만 DEBUG로 정했기 때문에
평상시에는 SqlMap 관련 로그만 출력됩니다
SqlMap 로그 정보도 에러가 났을 때만 보고싶다면 아래 내용을 모두 주석하시면 됩니다
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG


또한 기본설정을 DEBUG로 하게되면 SqlMap말고도 모든 로그가 나오게 됩니다 ( 응 ? )
무슨 내용이 나오는지는 직접 확인 하시길 ../ㅅ/


3. log4j 설정 - 콘솔+파일 출력

log4j.properties 파일을 다음과 같이하면 콘솔과 파일로 출력이 됩니다
# Global logging configuration - 전역 리포팅 레벨 설정
log4j.rootLogger=ERROR, stdout, logfile
# SqlMap logging configuration... - SqlMap 리포팅 레벨 설정
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG

# Console output.. - 콘솔 appender 설정
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] -%m%n

# File output - 파일 appender 설정
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
# 로그 파일 path
log4j.appender.logfile.File=c:/log/ibatis.log
# 파일 이어쓰기 여부 ( false 시 서버재시작하면 덮어씀 )
log4j.appender.logfile.Append=true
# 로그 layout 설정
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
리포팅레벨은 위에서 얘기했고
또 log4j 에서 기본적으로 알아야 할 것은 Appender(출력방식)와 Layout(출력내용) 인데
둘다 살펴 보겠습니다



4. Appender

1) ConsoleAppender : 말그대로 콘솔에 출력하는 방식으로 특별한 설정이 필요없습니다.. 있어도 무시
2) DailyRollingFileAppender : 시간을 주기로 파일을 생성하여 기록하는 방식입니다
DatePattern 으로 시간 단위를 설정 할 수 있습니다
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
#월단위 log4j.appender.logfile.DatePattern='.'yyyy-MM
#주단위 log4j.appender.logfile.DatePattern='.'yyyy-MM-ww
#12시간단위 log4j.appender.logfile.DatePattern='.'yyyy-MM-dd-a
#시간단위 log4j.appender.logfile.DatePattern='.'yyyy-MM-dd-HH
#분단위 log4j.appender.logfile.DatePattern='.'yyyy-MM-dd-HH-mm

3) RollingFileAppender : 일정 용량만큼 파일에 쓰는 방식입니다
MaxFileSize 로 파일의 최대크기를 정합니다
MaxBackupIndex 으로 파일최대갯수를 지정합니다. 만약 최대갯수까지 차면 처음의 로그파일에 재기록합니다
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.MaxFileSize=512KB
log4j.appender.logfile.MaxBackupIndex=3

그 외에도 FileAppender , net.SocketHubAppender .. 등 이 더 있지만 설명은 패스!
5. Layout

간단한 설명만 하겠습니다. 출력 결과는 직접 찍어보시기 바랍니다~

1) PatternLayout : 패턴을 직접 정하는 방식입니다.. 보통 이 방식을 씁니다
ConversionPattern 으로 패턴을 정합니다 ( 자세한 내용은 PDF 파일 참조 Log4jQuickRef.pdf )
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %r [%t] %-5p %c %x - %m%n
#log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
#log4j.appender.stdout.layout.ConversionPattern=%5p [%t] -%m%n

2) SimpleLayout : 말그대로 심플하게(?) 보여주는 방식입니다 시간도 안나옵니다.. -_-;
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
3) HTMLLayout : HTML테이블 형식으로 만들어줍니다 오오.... 디자인도 맘에 드는군요
log4j.appender.stdout.layout=org.apache.log4j.HTMLLayout
4) TTCCLayout : 심플보다 좀 많이 나옵니다.. 근데 여기서도 시간은 안나오네여 OTL
log4j.appender.stdout.layout=org.apache.log4j.TTCCLayout
728x90
반응형

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

[Spring + iBatis] 바인딩된 sql 문 로깅하기  (0) 2012.01.27
[ibatis] 관련 link  (0) 2012.01.27
[ibatis] 기본 설정  (0) 2012.01.27
[ibatis] 동적 쿼리 생성  (0) 2012.01.27
[ibatis] 로그 이쁘게 보이게하기  (0) 2012.01.27