티스토리 뷰

프로그래밍/Java

Log4J에 대하여

미니~ 2011. 9. 7. 21:52
이미 log4j는 많이 사용하고 있어서 별 도움은 안될지 모르겠지만, 
저와 같은 초보들을 위하여 간단히 정리해 봅니다.

Log4j에 대해서는 먼저 관련 사이트를 알려드리지요..

Log4j 설치 및 메인 사이트
http://logging.apache.org/log4j/docs/

제가 주로 설명하고자 하는 것은 Log4j를 활용한 예제와 의 로그 레벨및 환경설정입니다. 

1.  개요

자료모음에 포함된 log4j.zip 파일을 다운로드 하셔서 살펴보시기 바랍니다. 

LoggerUtil 클래스는 예전에 함께 일한 개발자가 만든것인데요.. 

나름대로 유용하게 사용하고 있어.. 정리해봤습니다. 


log4j를 사용하기 위한 방법은 다음과 같습니다. 


log4j.zip 파일의 lib 폴더 아래에 있는 log4j-1.2.8.jar 파일을 프로젝트에 추가합니다. 


이미 만들어진 util.mini 클래스의 LoggerUtil.java를 이용하여 로그 내역을 저장합니다. 


로그와 관련된 설정은 첨부된 파일의 log.properties를 수정하고 LoggerUtil.java 파일을 열어 로그의 위치를 지정합니다. 


public static void init(String className) { 

    // 로그 환경 파일 설정 

    init(className, "C:\\log.properties");   // 이 부분을 수정한다.





간단한 사용법은 다음과 같네요. ^^ 


// 미리 제작한 mini 유틸을 import 한다. 

import util.mini.LoggerUtil;



// 클래스의 이름으로 Logger를 초기화 한다. 

LoggerUtil.init(LoggerTest.class.getName()); 



// 로그를 레벨에 맞추어 기록한다. 

LoggerUtil.debug("Hello log4j.");

LoggerUtil.info("Hello log4j.");

LoggerUtil.warn("Hello log4j.");

LoggerUtil.error("Hello log4j.");

LoggerUtil.fatal("Hello log4j.");



첨부된 예제 LoggerTest.java를 살펴보면 쉽게 이해할 수 있을 것입니다. 

일단 프로젝트 수행시 간단하게 로그를 저장하고 관리할 수 있는 장점은 있지만, 

Wrappr Class를 사용하였기 때문에 아래 환경설정에서 설명할 로그를 호출한 메소드나 라인 정보가 Wrapper Class에 해당한다는 점이 

약간 문제가 있습니다. (밑에서 한번 더 설명하도록 하지요..)


2. 로그 레벨



로그 레벨은 다음과 같습니다.



DEBUG : 디버그 

INFO : 정보 

WARN : 경고 

ERROR : 에러 

FATAL : 심각한 오류 


순서는 DEBUG > INFO > WARN > ERROR > FATAL 이며, 



log.properties에서 설정한 값 이후의 내역은 모두 기록됩니다. 



즉, INFO로 설정하면, INFO, WARN, ERROR, FATAL의 내용이 로그에 기록되고, DEBUG 부분은 기록되지 않습니다. 


실제 개발시 이러한 점을 고려하여 로그를 남기면 실제 서버 운영시에 도움이 될 것입니다.



3. 로그 환경설정



로그 환경설정 파일인 log.properties의 내용은 다음과 같습니다.



# 로그 레벨과 로그 기록 형태를 지정한다. 아래는 debug이상, A1 / stdout의 설정에 따라 기록한다. 

log4j.rootCategory= debug,A1,stdout 


# 로그를 콘솔에 기록하는 부분이다. (appender와 layout을 지정한다.) 

log4j.appender.stdout= org.apache.log4j.ConsoleAppender 

log4j.appender.stdout.layout= org.apache.log4j.PatternLayout 


# 로그를 파일에 기록하는 부분이다. 

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender 

log4j.appender.A1.file= C:\\Temp\\log\\minilog.log 

log4j.appender.A1.datePattern= '.'yyyy-MM-dd 

log4j.appender.A1.append= true 

log4j.appender.A1.layout= org.apache.log4j.PatternLayout 

log4j.appender.A1.layout.ConversionPattern=%-5p %d{ISO8601} [%c{1}] - %m%n 



패턴 레이아웃에 대해 잠시 살펴보면 다음과 같습니다. 



C : 클래스명을 출력한다. {1}과 같은 설정을 추가하여 클래스 이름 또는 특정 패키지 이상만 출력하도록 설정할 수 있다. 

d : 로그 시간을 출력한다. java.text.SimpleDateFormat에서 적절한 출력 포맷을 지정할 수 있다. 

F : 파일 이름을 출력한다. 로그시 수행한 메소드, 라인번호가 함께 출력된다.

L : 라인 번호만 출력한다.

m : 로그로 전달된 메시지를 출력한다.

M : 로그를 수행한 메소드명을 출력한다. 

n : 줄 바꿈

p : 로그 이벤트명 (DEBUG등)

r : 로그 처리시간 (milliseconds)


예제 파일로 올려놓은 Wrapper Class를 사용할 경우, %M %L등이 의미가 없게 됩니다.

LoggerUtil 클래스의 내용을 출력하기 때문이죠..

이런 정보가 꼭 필요하신 분은 맨 처음 외부 강좌에 있는 내용을 참고하여 로그를 기록하시기 바랍니다. 

그럼.. 좋은 하루 되세요.
댓글
댓글쓰기 폼