From JCFWiKi
|
|
- 산출물 : JCF3.0-loging 메뉴얼
- 작성자: 김민아
- 작성일 : 2007/12/21
Copyright © 2007 Daewoo Information Systems Co., Ltd.
|
[편집] 로깅이란
- 로깅이란 영어단어를 그대로 해석하면 일지에 기록하는 것을 말한다.어플리케이션에서 로깅이란 어플리케이션이 실행될 때 어느 부분의 어떤 메소드가 실행되고 있는지, 어떤 데이터를 가지고 오는지에 대해 일지 대신에 시스템의 내부에 기록을 하는 것을 말한다.
- 이러한 로깅을 통해 개발자는 굳히 디버거모드로 실행하지 않아도 어플리케이션의 어떤 부분이 실행되고 있는지 알수 있다.
- 로깅을 사용하는 방법은 프로그램 코드 내에 로깅을 위한 구분(System.out.print)을 넣고 실행 시킨 후 생성된 로그를 보고 분석하는 것이다. 하지만 이때의 문제점은 생성되는 로그가 개발자 자신만이 아는 메시지로 남겨두기 때문에 표준이 없더 다른 사람들이 알기 어렵다.
- JCF logging을 사용하면 로그의 포맷을 누구나 다 알수 있도록 통일할 수 있으며, 콘솔에 뿌리주는 것 이외에도 경우에 따라서 로그 파일을 따로 남기는 등 다양한 방식으로 출력할 수 있다.
[편집] JCF logging 따라하기
1. JCF loging을 사용하기 위해서는 라이브러리에log4j 가 포함되어 았어야한다.
- 마우스 오른쪽 버튼을 눌러, build Path -> Configure build Path의 Libraries 에서 log4j 라이브러리가 있는지 확인한다.
- 만약에 log4j.jar이 없다면,log4j.jar 파일을 받아와 프로젝트 소스의 web->WEB-INF-> lib에 넣고, Configure build Path의 Libraries 에서 add JARs를 눌러 추가 시킨다.
2. 프로젝트 소스의 src 밑에 log4j.properties 파일을 만들어 다음과 같이 넣는다.
# Log4J Settings for log4j 1.2.x (via jakarta-commons-logging)
#
# The five logging levels used by Log are (in order):
#
# 1. DEBUG (the least serious)
# 2. INFO
# 3. WARN
# 4. ERROR
# 5. FATAL (the most serious)
# Set root logger level to WARN and append to stdout
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%d %5p (%c:%L) - %m%n
########################## framework logLOG CONFIGURATION ###########################
#log4j.logger.com.opensymphony=WARN
#log4j.logger.org.apache.struts2=WARN
#log4j.logger.org.apache=WARN
#log4j.logger.org.springframework=WARN
log4j.logger.com.ibatis=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
########################## APPLICATION LOG CONFIGURATION ###########################
log4j.logger.jcf=DEBUG
[편집] JCF loging 설명
# The five logging levels used by Log are (in order):
#
# 1. DEBUG (the least serious)
# 2. INFO
# 3. WARN
# 4. ERROR
# 5. FATAL (the most serious)
- 로깅레벨의 우선 순위는 FATAL 이 가장 높고 DEBUG가 가장 낫다.
# Set root logger level to WARN and append to stdout
log4j.rootLogger=FATAL, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- log4j.rootLogger=FATAL, stdout :
- 기본 로깅 레벨을 'FATAL'로 하고 stdout Appender를 사용한다는 의미(stdout'에 대해서는 밑에 정의되어 있음).
|
|
- 기본 로깅 레벨은 따로 로깅레벨을 설정하지 않으면 적용되는 로깅레벨이다.
- 기본 로깅레벨을 DEBUG로 하면, 따로 로깅레벨을 설정하더라도 모두 DEBUG로 적용된다.
- 그러므로 기본 로깅레벨을 로깅처리할 부분의 로깅레벨보다 낮은 레벨로 지정해야 로깅처리하는 부분만 로그에 나타난다.
|
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender :
- stdout appender의 로그 메시지를 콘솔에 출력한다는 의미
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout :
- stdout appender는 PatternLayout 을 사용한다는 의미.
- 로깅출력 패턴 포메팅 정의
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%d %5p (%c:%L) - %m%n
2007-12-20 15:29:30,734 INFO (com.opensymphony.xwork2.spring.SpringObjectFactory:71) - Setting autowire strategy to name
- framework 로깅 설정 - framework 부분에 대한 로깅을 설정하는 부분
################# framework log CONFIGURATION #######################################################
#log4j.logger.com.opensymphony=WARN
#log4j.logger.org.apache.struts2=WARN
#log4j.logger.org.apache=WARN
#log4j.logger.org.springframework=WARN
log4j.logger.com.ibatis=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
- log4j.logger.com.opensymphony=WARN : com.opensymphony의 하위 패키지에 대해 로깅 레벨을 WARN 으로 지정한다.
- log4j.logger.org.apache.struts2=WARN : org.apache.struts2의 하위 패키지에 대해 로깅 레벨을 WARN 으로 지정한다.
- log4j.logger.org.springframework=WARN: org.springframework의 하위 패키지에 대해 로깅 레벨을 WARN 으로 지정한다.
- log4j.logger.com.ibatis=DEBUG: com.ibatis의 하위 패키지에 대해 로깅 레벨을 DEBUG으로 지정한다.
- log4j.logger.java.sql.Connection=DEBUG: java.sql.Connection의 하위 패키지에 대해 로깅 레벨을 DEBUG으로 지정한다.
- log4j.logger.java.sql.Statement=DEBUG: java.sql.Statement의 하위 패키지에 대해 로깅 레벨을 DEBUG으로 지정한다.
- log4j.logger.java.sql.PreparedStatement=DEBUG: .java.sql.PreparedStatement의 하위 패키지에 대해 로깅 레벨을 DEBUG으로 지정한다.
- log4j.logger.java.sql.ResultSet=DEBUG: java.sql.ResultSet의 하위 패키지에 대해 로깅 레벨을 DEBUG으로 지정한다.
- 어플리케이션 로깅 설정 - 어플리케이션 부분에 대한 로깅을 설정하는 부분
########################## APPLICATION LOG CONFIGURATION ###########################
log4j.logger.jcf=DEBUG
- 어플리케이션의 가장 상위 패키징(jcf)에 대해 로깅 레벨을 지정(DEBUG)한다.
- 소스 로깅처리
private void dumpMenuTree(Tree<Menu> tree) {
Iterator<Menu> it = tree.iterator();
while (it.hasNext()) {
try {
logger.debug("- " + BeanUtils.describe(it.next()));
}
catch (Exception e) {
e.printStackTrace();
}
}
}
- logger.debug()안에 위와 같이 log4j.properties 파일에서 설정할 포맷팅 뒤에 덧붙힐 메시지를 추가한다.
[편집] loging API 구조
[편집] Log4j 구조
- JCF3.0 은 Log4j를 적용하여 사용하고 있다.
- Log4j는 크게 3가지 요소로 구성되어 있습니다.
- Logger(Category) : 로깅 메세지를 Appender에 전달함.
- Appender : 전달된 로깅 메세지를 파일에다 기록할 것인지, 콘솔에 출력할 것인지 아니면 DB에 저장할 것인지 매개체 역활을 함.
- Layout : Appender가 어디에 출력할 것인지 결정했다면 어떤 형식으로 출력할 것이지 출력 layout을 결정함.
- Appender
(Appender 종류)
| Appender
| 설명
|
| ConsoleAppender
| 로그 메시지를 콘솔에 출력
|
| DailyRollingFileAppender
| 로그 메시지를 파일로 저장
|
| DatePattern
| 옵션에 따라 원하는 기간마다 로그파일을 갱신
|
| JDBCAppender
| 로그 메시지를 DB에 저장
|
| RollingFileAppender
| 로그 메시지를 파일로 저장. 설정된 size를 초과하면 로그파일이 갱신됨.
|
| SocketAppender
| 로그 메시지를 socket을 이용해서 지정된 곳으로 보냄
|
| TelnetAppender
| 로그 메시지를 telnet을 통해 보냄. 원격 모니터링, 특히 servlet의 모니터링에 유용함.
|
[편집] 로깅레벨
- 로깅레벨의 우선순위는 FATAL이 가장 높고 DEBUG가 가장 낮습니다.
- 예를 들어 레벨을 WARN으로 설정하면 WARN이상되는 로그(FATAL, ERROR, WARN)만 출력합니다.
| 로깅 레벨
| 설명
|
| FATAL
| 가장 그리티컬한 에러가 발생했을 때 사용한다.
|
| ERROR
| 일반적인 에러가 발생했을 때 사용한다.
|
| WARN
| 에러는 아니지만 주위가 필요할 때 사용한다.
|
| DEBUG
| 일반적인 정보를 상세히 나타낼 때 사용한다.
|
[편집] layout 포맷
- 로그자체를 어떤 포맷으로 남길지 결정하는 layout에는 HTMLLayout, PatternLayout, SimpleLayout, XMLLayout등이 있으며 PatternLayout이 일반적으로 가장 많이 쓰입니다
(PatternLayout 설정 포맷)
| %p
| debug, info, warn, error, fatal 등의 로깅레벨이 출력된다.
|
| %m
| 로그내용(코드상에서 설정한 내용)이 출력
|
| %d
| 로깅 이벤트가 발생한 시간이 출력
|
| %t
| 로그이벤트가 발생된 쓰레드의 이름을 출력
|
| %%
| % 표시를 출력하기 위해 사용한다.
|
| %n
| 행바꿈
|
| %F
| 로깅이 발생한 프로그램 파일명
|
| %l
| 로깅이 발생한 라인의 정보
|
| %L
| 로깅이 발생한 라인번호
|
| %M
| 로깅이 발생한 method 명
|
| %r
| 어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds)
|