'log4j'에 해당되는 글 2건

  1. 2008.06.23 tomcat 6.0 에서 log4j 설정
  2. 2008.04.27 기본적인 log4j.properties와 간단한 사용법

http://greatkim91.tistory.com/trackback/11


tomcat 5.5 에서의 log4j 위치

\apache-tomcat-5.5.25\common\classes\log4j.properties


이 경우 workspace 의 프로젝트에 별도로 log4j를 설정해주지 않아도 모든 프로젝트에 적용이 되었다.


but
tomcat 6.0 에서는
common\classes 폴더가 없다.
이런 난감하다.


tomcat 6.0 에서는
\WEB-INF\src 폴더에 log4j.properties 에 두면 된다.
\WEB-INF\classes 에 폴더에 log4j 생성된다.

혹은
\apache-tomcat-6.0.16\lib\ 폴더에 둔다.
그러면 모두 적용된다.


Posted by [czar]
,
아직도 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 (%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 (%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);

    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 으로 선언하면 된다.

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

마무리~
자, 이제 프로그램에서 보기 싫은 System.out.println()을 몽땅 없애버리자!!
Log4J하나만으로도 디버깅하기 쉽고 뽀대나고 어딘가 비싸보이는 프로그램이 된다. ^^;
by 권남
 
출처 :  http://kwon37xi.egloos.com/2176487
Posted by [czar]
,