log4j
log4j.xml : Log4j의 설정파일로, 여기서 로그 출력 형식과 레벨 등을 모두 지정할 수 있다.
구조
Logger - 출력할 메시지를 Appender에 전달한다.
Appender - 전달된 로그를 어디에 출력할 지 결정한다. (콘솔 출력, 파일 기록, DB 저장 등)
Layout - 로그를 어떤 형식으로 출력할 지 결정한다.
로그 레벨
FATAL - 아주 심각한 에러가 발생한 상태를 나타낸다.
ERROR - 어떠한 요청을 처리하는 중 문제가 발생한 상태를 나타낸다.
WARN - 프로그램의 실행에는 문제가 없지만, 향후 시스템 에러의 원인이 될수 있는 경고성 메시 지를 나타낸다.
INFO - 어떠한 상태변경과 같은 정보성 메시지를 나타낸다.
DEBUG - 개발시 디버그 용도로 사용하는 메시지를 나타낸다.
TRACE - 디버그 레벨이 너무 광범위한것을 해결하기 위해서 좀 더 상세한 이벤트를 나타낸다.
Pattern Option
%p - debug, info, warn, error, fatal 등의 priority 출력
%m - 로그내용 출력
%d - 로깅 이벤트가 발생한 시간을 출력 (포맷은 %d{HH:mm:ss} 같은 형태의 SimpleDateFormat)
%t - 로그이벤트가 발생된 쓰레드의 이름 출력
%F - 로깅이 발생한 프로그램 파일명 출력
%l - 로깅이 발생한 caller의 정보 출력
%L - 로깅이 발생한 caller의 라인수 출력
%M - 로깅이 발생한 method 이름 출력
% - % 표시 출력
%n - 플랫폼 종속적인 개행문자 출력
%c - 카테고리 출력(카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c 출력)
%C - 클래스명 출력 (클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 출력)
%r - 어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds) 출력
%x - 로깅이 발생한 thread와 관련된 NDC(nested diagnostic context) 출력
%X - 로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context) 출력
주요 Class
ConsoleAppender(org.apache.log4j.ConsoleAppender) - 콘솔에 로그 메시지 출력
FileAppender(org.apache.log4j.FileAppender) - 파일에 로그 메시지 기록
RollingFileAppender(org.apache.log4j.rolling.RollingFileAppender) - 파일 크기가 일정 수준 이상이 되면 기존 파일을 백업파일로 바꾸고 처음부터 기록
DailyRollingFileAppender(org.apache.log4j.DailyRollingFileAppender) - 일정 기간 단위로 로그 파일을 생성하고 기록
JDBCAppender(org.apache.log4j.jdbc.JDBCAppender) - DB에 로그를 출력. 하위에 Driver, URL, User, Password, Sql과 같은 parameter를 정의할 수 있음
SMTPAppender - 로그 메시지를 이메일로 전송
NTEventAppender - 윈도우 시스템 이벤트 로그로 메시지 전송
주의
Log4j에 .properties를 사용하는 건 최악이다. 절대로 하면안됨.
(.properties는 굉장히 옛날 방식이고 절대로 사용해서는 안되는 방식이며,최신 Log4j에서는 xml과 json을 이용한 설정만 지원하고 있다.)