기본적인 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하나만으로도 디버깅하기 쉽고 뽀대나고 어딘가 비싸보이는 프로그램이 된다. ^^;

by 권남 | 2004/09/10 22:02 | 프로그래밍 | 트랙백(5) | 핑백(3) | 덧글(6)

트랙백 주소 : http://kwon37xi.egloos.com/tb/2176487
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from pcrcrabbit님의.. at 2006/04/05 17:09

제목 : log4j 간단 적용법
기본적인 log4j.properties와 간단한 사용법 아직도 System.out.println()으로 디버그용 메시지를 화면에 출력한다면, 이제 삽질 그만하고 로깅 API들을 사...more

Tracked from 새롭게 시작하자.. 다.. at 2006/04/19 20:42

제목 : log4j 간단 적용법
log4j 간단 적용법...more

Tracked from 제목칸 at 2006/12/06 19:17

제목 : log4j사용 로그남기기
기본적인 log4j.properties와 간단한 사용법 ...more

Tracked from L.I.E - Love.. at 2008/01/15 15:46

제목 : log4j를 이용한 로깅
아직도 System.out.println()으로 디버그용 메시지를 화면에 출력한다면, 이제 삽질 그만하고 로깅 API들을 사용해 볼 것을 권장하고 싶다.그 중에서도 난 Log4j를 사용한다. (사실 이거밖에 모른다... ;) )혹여 log4j.properties 설정이 귀찮아서 Log4J를 사용하지 않는다면 다음의 기본적인 log4j.properties를 사용해보자. 이것만으로도 System.out.println과는 비교할 수......more

Tracked from Fantastic Ri.. at 2008/11/18 16:10

제목 : Log4J Tip & Tech
※ Apache Log4J 와 관련된 유용한 정보들을 모았습니다. 앞으로 계속 업데이트 될 예정입니다. 좋은 정보 공유해주시면 정말 감사하겠습니다. ^___^ Update 2008. 11. 18 1. 기본적인 log4j.properties 와 간단한 사용법 (원문보기)...more

Linked at mucha suerte☆ : .. at 2007/08/01 16:42

... 만으로도 디버깅하기 쉽고 뽀대나고 어딘가 비싸보이는 프로그램이 된다. ^^; by 권남 출처 : http://kwon37xi.egloos.com/2176487 =========================================================== ... more

Linked at [나는 송정헌이다.] : lo.. at 2008/12/23 17:53

... al(strLog);이렇게 하면 된다... 위 소스의 Logger 객체의 각 다섯개의 멤버함수는 따로 설명을 안하겠다. 위에서 다했다.끝이다.참고싸이트..http://kwon37xi.egloos.com/2176487http://blog.naver.com/zoom7810?Redirect=Log&logNo=50032106915http://blog.naver ... more

Linked at 結婚できない男 : log4j 설정 at 2009/08/24 09:40

... 권남님 블로그에서 가져옴출처 : http://kwon37xi.egloos.com/2176487 한국 들어와서 적응 중이다.회사 로깅이 설정 안되어 있는거 같아서.. 해야 할거 같아.간만에 할려니... ... more

Commented by 백일몽 at 2006/02/06 09:57
properties 가 점점 복잡해져서 xml 로 바꿨더니 좀 세상 살 만하네요.
Commented by 권남 at 2006/02/06 16:14
//백일몽님, 저는 사실 저 위의 예제를 벗어나서 설정할일이 그다지 많지 않더라구요.
가끔 특정 클래스에 대한 로거를 따로 설정하는 경우가 있긴 하지만, 뭐 그리 봅잡하게 추가되지도 않구요.
그래서 사실 항상 저걸 거의 그대로 복사해서 쓴답니다... ^^;
Commented by 굴돌 at 2007/08/01 12:53
좋은 정보 고맙습니다~ :)
프린트~ 프린트~ :D
Commented by 굴돌 at 2007/08/01 12:57
(그런데 이글루스는 프린트가 잘 안되서 트랙백 걸린 네이버 블로그의 포스트를 프린트 하게 되는군요...;;...)
Commented by F-R at 2008/11/17 11:02
좋은 정보 잘 보았습니다. ^^ 덕분에 쉽게 사용할 수 있겠네요. 감사합니다.
Commented by dev.lee at 2009/05/06 18:47
좋은정보 감사합니다. 담아갑니다

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶