나의 즐겨찾기 | 블로그홈 | 바로가기 바로가기 | 로그인
블로그  |  사진갤러리  |  동영상갤러리 방명록  |   즐겨찾기 추가
wntkdfid (wntkdfid)
프로필     
전체 글보기(76)
자바
순서도
IT_잡학
VI
오라클
검색엔진
Tomcat
경제지식
리눅스유닉스
DB2 새 글이 있습니다.
MySql
LOG4J
보안
자바스크립트
eclipse
게시판
설문
백만가지 주제
오늘 전체
방문자 19 8359
구독자 0 0
댓글 0 1
참조글 0 0
HanRSS 로 구독하기Fish 로 구독하기
2010 02월
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28
 즐겨찾기
 즐겨찾기 글모음
개설일 : 2008/10/09
 
리눅스유닉스 전체보기
기본적인 log4j.properties와 간단한 사용법

아직도 System.out.println()으로 디버그용 메시지를 화면에 출력한다면, 이제 삽질 그만하고 로깅 API들을 사용해 볼 것을 권장하고 싶다.

그 중에서도 난 Log4j를 사용한다. (사실 이거밖에 모른다... ;) )

혹여 log4j.properties 설정이 귀찮아서 Log4J를 사용하지 않는다면 다음의 기본적인 log4j.properties를 사용해보자. 이것만으로도 System.out.println과는 비교할 수 없는 강력하고 편리한 로깅 기능을 사용할 수 있다.

기본적인 log4j.properties
아래 로그설정은 로깅 메시지를 화면에도 출력하고 파일로도 출력한다. 파일의 경우에는 매일매일 날짜별로 다른 파일을 사용하므로 한개의 로그 파일이 무한정 커지는 것을 걱정할 필요는 없다.

이 설정대로 하면 로깅 메시지에 로그를 남긴 소스파일의 이름과 소스에서 메소드 이름과 줄 번호까지 출력된다. System.out.println()으로는 꿈도 못꾸는 기능들이다.

log4j.rootLogger = DEBUG, stdout, dailyfile

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n

log4j.appender.dailyfile.Threshold = DEBUG
log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyfile.File = logfile.log
log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyfile.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n


저기서 logfile.log 가 로그의 내용을 출력할 파일 이름이다. 적당히 다른 이름으로 바꾼다. 절대경로로 줘도되고 위와 같이 상대경로로 줘도 된다.

위 파일을 클래스패스가 걸린 디렉토리에 두면 된다. 웹 어플리케이션은 WEB-INF/classes에 두면 된다.

로그는 어떻게 남기지?
각 클래스에서 로그를 남길 때는 다음과 같이..

// 로거 임포트하기
import org.apache.log4j.Logger;

public class ClassName {
    /** Log4J 로거 얻기 */
    private Logger log = Logger.getLogger(ClassName.class);
    //혹은 private Logger log = Logger.getLogger(this.getClass());
    public void method() {

        if (log.isDebugEnabled()) {
            log.debug("디버깅용 메시지");
        }
        log.info("정보를 남기기위한 메시지");
        
        try {
            //어쩌구 저쩌구 실행...
        } catch (Exception ex) {
            //로그에 예외 메시지도 함께 남기기
            log.error("예외가 발생했어요~~", ex);
        }
    }
}


ClassName.class는 로거가 출력할 클래스의 이름이다. 그냥 항상 클래스이름.class로 하면 된다.

만약 static 메소드에서 로거를 사용해야 한다면 로거를 생성하는 부분을

private static Logger log = Logger.getLogger(ClassName.class);



위와 같이 static 으로 선언하면 된다.
되도록 static으로 로거를 생성하지 말라. 이에 관해서는, Logging/StaticLog를 참조한다. 추가: 2006/04/11

실제로 로그 메시지 출력이 어떻게 되는지는 직접 확인해보면 알 수 있을 것이다.

마무리~
자, 이제 프로그램에서 보기 싫은 System.out.println()을 몽땅 없애버리자!!
Log4J하나만으로도 디버깅하기 쉽고 뽀대나고 어딘가 비싸보이는 프로그램이 된다. ^^;



나의 최신글 전체보기
날짜 포맷  10/02/10 (수) 오전 10:43

DBMS별 날짜포맷 변환     Oracle select sysdate from dual; 날짜+시분초 까지 조회... 더보기

최진기7부  09/12/28 (월) 오후 1:05

5월 17일에 방영한 내용입니다.    경제가 불안하다면 절대화폐인 '금'의 비중을 높여야 합니다. 그럼, ... 더보기

최진기6부  09/12/28 (월) 오후 1:03

5월 10일에 방영된 내용입니다.    세계경제의 바로미터, 원자재에 대해서 이야기 하겠습니다. 세계경제의 지표인 원유가격... 더보기

· 최진기5부
· 최진기3부
· 최진기2부
· 최진기1부
· 10년후 베이비붐 은퇴이후 경...
· jsp컴파일위치
· ERROR 2002 (HY00...
· SSH란
· NumberFormatExce...
· dblink
· 순서도 프로그램 다운로드
· 어노테이션


 
 인기도 :
 이 블로그 점수주기
다녀간 블로거 더보기
- 설화
- 로우맨
- 후천사랑
- 블로그관리자
- 한란이