전자정부프레임워크

log4j.xml 설정

멋진꿈 2011. 9. 19. 15:08

로그 레벨 저장하기
log4j는 기본적으로 5가지의 로그 레벨이 존재한다.

로그 레벨 설명
fatal 아주 심각한 에러가 발생한 상태를 나타냄. 시스템적으로 심각한 문제가 발생해서 어플리케이션 작동이 불가능할 경우가 해당하는데, 일반적으로는 어플리케이션에서는 사용할 일이 없음.
error 요청을 처리하는중 문제가 발생한 상태를 나타냄.
warn 처리 가능한 문제이지만, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타냄.
info 로그인, 상태변경과 같은 정보성 메시지를 나타냄.
debug 개발시 디버그 용도로 사용한 메시지를 나타냄.
trace log4j1.2.12에서 신규 추가된 레벨으로서. 디버그 레벨이 너무 광범위한것을 해결하기위해서 좀더 상세한 상태를 나타냄.

다만 이때 Logger의 setLevel에서 지정된 로그레벨이 있다면 지정된 로그레벨 이하의 로깅이벤트는 무시된다.

따라서 로그도 남지 않는다. 즉, 아래와 같이

logger.setLevel(Level.INFO);

코드내에 지정되어 있다면, 다음의 세 코드 중

logger.debug("debug 로그");logger.info("info 로그");logger.warn("warning 로그");

debug 로그는 남지 않고 info 와 warn 로그만 남는다. 자바에서는 C와 같이 전처리기의 기능이 없기 때문에 #ifdef DEBUG와 같은 형태와 같이 디버깅 때와 릴리즈 때의 디버깅코드를 각각 별도로 생성할 수가 없다. 따라서 log4j의 이러한 기능은 로그관리에 있어서 상당히 편리하다.

log4j.xml 에 설정내용에 대한 설명

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration
    xmlns:log4j="http://jakarta.apache.org/log4j/"
    debug="false">

 ==>페턴 레이아웃 설정
C 클래스명을 출력한다. DateLayout과 같은 설정을 추가하여 클래스 이름 또는 특정 패키지 이상만 출력하도록 설정할 수 있다.
d 로그 시간을 출력한다. java.text.SimpleDateFormat에서 적절한 출력 포맷을 지정할 수 있다.
F 파일 이름을 출력한다. 로그시 수행한 메소드, 라인번호가 함께 출력된다.
L 라인 번호만 출력한다.
m 로그로 전달된 메시지를 출력한다.
M 로그를 수행한 메소드명을 출력한다.
n 줄 바꿈
p 로그 이벤트명 (DEBUG등)
r 로그 처리시간 (milliseconds)   
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %5p [%c] %m%n" />
        </layout>  
    </appender>
   
    <logger name="egovframework" additivity="false">
        <level value="ERROR"/>
        <appender-ref ref="console"/>
    </logger>

 <!-- log SQL with timing information, post execution -->
 <logger name="jdbc.sqltiming" additivity="false">
  <level value="ERROR" />
  <appender-ref ref="console" />
 </logger>
 
 <logger name="org.springframework" additivity="false">
  <level value="ERROR" />
  <appender-ref ref="console" />
 </logger>
 
 <root>
  <level value="ERROR" />
  <appender-ref ref="console" />
 </root>
                   
</log4j:configuration>

Layout

로그를 어떤 포맷의 형태로 남길 것인가? 단순히 메시지 외에도 현재 로그하는 대상의 스레드명, 로그시간 등등 많은 정보를 조합할 수 있다. Layout에는 HTMLLayout, PatternLayout, SimpleLayout, XMLLayout 등이 있다. SimpleLayout과 XMLLayout 등도 많이 사용할 수 있겠지만, 아무래도 자신이 원하는 스타일의 로그메세지를 남기기 불편한 면이 있다. 필자가 자주 사용하는 레이아웃은 PatternLayout으로서, c 함수의 printf처럼 다양한 로그 메시지 조합을 만들어 낼 수가 있다.

==> %p : debug, info, warn, error, fatal 등의 priority 가 출력된다.%m : debug(), info(), warn(), error(), fatal() 등의 함수로


http://keabab.egloos.com/5093331 내용을 참조하였습니다. 문제가 있거나 혹시 글의 삭제를 원하시면 남겨주시면 확인하고 삭제처리하도록하겠습니다.