로깅

From JCFWiKi

Jump to: navigation, search

그림:check.gif

  • 산출물 : 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 라이브러리
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 설명

  • 로깅레벨 - 5가지의 로깅 레벨이 있다.
# 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가 가장 낫다.


  • 로깅 append와 로깅 레벨 설정
# 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'에 대해서는 밑에 정의되어 있음).

그림:warning.gif

  • 기본 로깅 레벨은 따로 로깅레벨을 설정하지 않으면 적용되는 로깅레벨이다.
  • 기본 로깅레벨을 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가지 요소로 구성되어 있습니다.
      1. Logger(Category) : 로깅 메세지를 Appender에 전달함.
      2. Appender : 전달된 로깅 메세지를 파일에다 기록할 것인지, 콘솔에 출력할 것인지 아니면 DB에 저장할 것인지 매개체 역활을 함.
      3. 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)