posted by 지긋이 2019. 7. 25. 13:27

보통 log4j의 경우 2가지 형태(Properties, Xml)로 작성이 되는데 그간 프로젝트에서는 Xml로 설정된 것만 사용하였다.

이번에도 그러한 경우인데 스쳐지나가는 정보로 알던 것을 기록상 남겨본다.

log4j의 정의라든가는 워낙 많은 정보가 인터넷상 있으므로(?) 핵심정보만!

1. log4j의 레벨
FATAL > ERROR > WARN > INFO > DEBUG > TRACE

  • FATAL : 아주 심각한 에러가 발생한 상태
  • ERROR : 요청을 처리하는 중 문제가 발생한 상태
  • WARN : 처리 가능한 문제이지만, 향후 에러의 원인이 될 수 있는 상태
  • INFO : 로그인, 상태변경과 같은 정보성 메세지
  • DEBUG : 개발시 디버그 용도로 사용
  • TRACE : 디버그 레벨이 너무 광범위하므로, 좀 더 상세한 상태를 나타냄

2. log4j 주요 클래스 : Appender 는 로그의 출력 위치를 지정해준다.
org.apache.log4j.ConsoleAppender 콘솔에 로그 메시지 출력    
org.apache.log4j.FileAppender 파일에 로그 메시지 기록   
org.apache.log4j.rolling.RollingFileAppender
파일 크기가 일정 수준 이상 일 때 기존 파일을 백업파일로 바꾸고 처음부터 기록   
org.apache.log4j.DailyRollingFileAppender 일정 기간  단위로 로그 파일을 생성하고 기록   
org.apache.log4j.jdbc.JDBCAppender
RDB 테이블에 로그를 출력. 하위에 Driver, URL, User, Password, Sql과 같은 parameter를 정의
org.apache.log4j.net.SMTPAppender 로그 메시지를 이메일로 전송   
org.apache.log4j.NTEventLoggerAppender 윈도우 시스템 이벤트 로그로 메시지 전송

<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p] (%C{1}.%M:%L) %m%n" />   
    </layout>
</appender>

3. layout 출력 포맷
%p : 로그레벨 출력
%m : 로그내용 출력
%d : 로그가 발생한 시간을 출력
- 포맷은 %d{HH:mm:ss}, %d{yyyy-MM-dd HH:mm:ss}같은 형태로 사용(SimpleDateFormat 참고)
%t : 로그가 발생된 스레드의 이름을 출력
%% : % 표시를 출력하기 위해 사용
%n : 플랫폼 종속적인 개행문자가 출력. (\r\n 또는 \n)
%c : 해당되는 로거의 이름을 끝에서부터 출력 ex. %c{끝에서부터 숫자}
%C : 클래스명을 출력 ex. %C{끝에서부터 숫자}
%F : 로깅이 발생한 프로그램 파일명을 출력
%l : 로깅이 발생한 caller의 정보를 출력
%L : 로깅이 발생한 caller의 라인수를 출력
%M : 로깅이 발생한 method명을 출력
%r : 어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds)을 출력
%x : 로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)를 출력
%X : 로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력