[JAVA] log4j의 설정 및 사용

|
지금까지 System.out.println을 사용해 로그를 남기는 방식을 전환하기 위해 log4j를 써보기로 했다.

apache에서 log4j 라이브러리를 다운받고 프로젝트에 추가, 몇가지 간단한 작업을 수행하니 바로바로 로그가 쌓였다.

지금까지 사용하던 sysout보다 훨씬 더 좋은 방법임에 틀림없다.

log4j.properties 파일을 사용하여 설정을 하였고, 간단히 logger를 생성하는 클래스를 통해서 쓰기 편한 몇가지 메소드를 생성해 두었다.


* log4j properties 내역

log4j.rootLogger = DEBUG, stdout, Dlevel, Ilevel, Wlevel, Elevel, Flevel

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %-5p [%t] %3x - %m%n

log4j.appender.Dlevel.Threshold = DEBUG
log4j.appender.Dlevel=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Dlevel.File=classes/log/[DEBUG]batch_system.log
log4j.appender.Dlevel.Append=true
log4j.appender.Dlevel.DatePattern='.'yyyy-MM-dd
log4j.appender.Dlevel.layout=org.apache.log4j.PatternLayout
log4j.appender.Dlevel.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %-5p [%t] %3x - %m%n

log4j.appender.Ilevel.Threshold = INFO
log4j.appender.Ilevel=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Ilevel.File=classes/log/[INFO]batch_system.log
log4j.appender.Ilevel.Append=true
log4j.appender.Ilevel.DatePattern='.'yyyy-MM-dd
log4j.appender.Ilevel.layout=org.apache.log4j.PatternLayout
log4j.appender.Ilevel.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %-5p [%t] %3x - %m%n

log4j.appender.Wlevel.Threshold = WARN
log4j.appender.Wlevel=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Wlevel.File=classes/log/[WARN]batch_system.log
log4j.appender.Wlevel.Append=true
log4j.appender.Wlevel.DatePattern='.'yyyy-MM-dd
log4j.appender.Wlevel.layout=org.apache.log4j.PatternLayout
log4j.appender.Wlevel.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %-5p [%t] %3x - %m%n

log4j.appender.Elevel.Threshold = ERROR
log4j.appender.Elevel=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Elevel.File=classes/log/[ERROR]batch_system.log
log4j.appender.Elevel.Append=true
log4j.appender.Elevel.DatePattern='.'yyyy-MM-dd
log4j.appender.Elevel.layout=org.apache.log4j.PatternLayout
log4j.appender.Elevel.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %-5p [%t] %3x - %m%n

log4j.appender.Flevel.Threshold = FATAL
log4j.appender.Flevel=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Flevel.File=classes/log/[FATAL]batch_system.log
log4j.appender.Flevel.Append=true
log4j.appender.Flevel.DatePattern='.'yyyy-MM-dd
log4j.appender.Flevel.layout=org.apache.log4j.PatternLayout
log4j.appender.Flevel.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %-5p [%t] %3x - %m%n



DEBUG 레벨부터 모두 표시될 수 있도록 했고, 콘솔출력과 레벨별 로그파일의 생성을 동시에, 하루 단위로 새로운 파일을 생성토록 했다.

rolling.DatePattern의 경우 현재는 하루 단위로 파일을 분리하였고, 설정에 따라 분단위까지 가능하다.ex)'.'yyyy-MM-dd-HH-mm

로그가 생성되는 로우 단위의 옵션을 살펴보자.



* PatternLayout 

 

 옵 션 정 의 
 %p debug, info, warn, error, fatal 등의 레벨이 출력
 %m  (메시지)로그내용이 출력
 %d  로깅 이벤트가 발생한 시간을 출력, 형태는 %d{yyyy-MM-dd HH:mm:ss, SSS}
 %t  로깅 이벤트가 생성된 스레드의 이름을 출력
 %%  %를 출력
 %n  플랫폼 종속적인 개행문자가 출력, \r\n or \n
 %c  카테고리를 출력, %c{2}를 사용하면 중괄호 안의 수 만큼 뒤에서부터 카테고리를 출력
 %C  클래스명을 출력, %C{2}를 사용하면 중괄호 안의 수 만큼 뒤에서부터 클래스를 출력
 %F  로깅이 발생한 파일명을 출력
 %l  로깅이 호출된 위치정보를 출력
 %L  로깅이 호출된 라인수를 출력
 %M  로깅이 발생한 메소드 이름을 출력
 %r  어플리케이션 시작 이후부터 로깅이 발생한 시점의 시간(밀리세컨드)
 %x  로깅 이벤트를 발생시킨 스레드와 관련된 NDC(nested diagnostic context)를 출력
 %X  로깅 이벤트를 발생시킨 스레드와 관련된 MDC(mapped diagnostic context)를 출력



실제 사용하는 클래스에서는 org.apache.log4j.Logger를 import 하고

클래스 안에서 static한 Logger의 인스턴스를 생성하였다.

public static Logger logger = Logger.getLogger(CommonLog.class);

생각보다 너무 간단하게 설정하고 사용할 수 있었다.

사용자가 더 쉽게 사용할 수 있도록 logging 메소드를 구현해 놓았다.

'JAVA' 카테고리의 다른 글

[JAVA] javac 및 java 실행시 주의사항  (1) 2011.11.01
[JAVA] 문자열 비교방법  (0) 2010.12.01
And