log4j 설정
log4j.rootLogger=DEBUG, console, save
※앞의 DEBUG는 전체 Level설정값이다...
뒤에 log4j.appender.console.Threshold를 이용해서 Level을 지정해주지 않으면 여기서 설정된 설정치를 이용하여 log가 생성된다.
참고로 로그 레벨은( level : DEBUG < INFO < WARN < ERROR < FATAL) 제일 왼쪽이 제일아랫레벨이다.
여기서 WARN을 설정하면WARN, INFO까지만 로그가 출력이 된다.
※뒤의 consloe, save는 appender의 이름으로 2개의 appender를 사용하겠다는 설정이다.
- ConversionPattern 은 로그를 어떤 형태로 기록할지에 대한 설정이다. 각 옵션은 아래와 같다.
- %m : 당신이 지정한 메세지를 출력
- %p : 로깅 이벤트의 priority 를 출력
- %r : 어플리케이션이 시작되어 로깅이벤트가 일어날때까지의 경과시간을 밀리세컨드 값으로 출력
- %c : 로깅이벤트의 category를 출력한다. 예를 들어 category 이름이 "a.b.c" 일때 %c{2} 는 "b.c"를 출력하며 {2}는
도트(.)로 구분된 category 이름의 마지막 두개의 컴포넌트를 의미한다.
{n} 이 없으면 기본적으로 카테고리의 이름을 모두 출력한다.
- %t : 로깅 이벤트를 생성한 스레드 이름을 출력
- %x : 로깅이벤트를 발생시킨 스레드에 관련된 내포검사항목(Nested Diagnostic Context : NDC)을 출력한다.
Java Servlet 과 같이 다수의 클라이언트가 분산된 스레드에 의해 다루어 질 때 유용하다.
- %n : 플랫폼 독립적인 개행문자를 출력한다. "\n" 또는 "\n\r" 등이 지정될 수 있다.
- %% : 하나의 % 기호를 출력한다.
- 경고 : 아래의 형식은 프로그램의 실행속도를 느리게 한다. 실행속도가 중요하지 않은 것이 아니라면 사용을 피하도록 한다.
- %d : 로깅이벤트가 일어난 날자(date)을 출력한다.
date 변환 지정자는 날짜형식 지정자 뒤에 이어 나오는 brace({..}) 사이에 둘러쌓여 나온다.
예: %d{HH:mm:ss,SSS} 또는 %d{dd MMM yyyy HH:mm:ss,SSS}
만약 날자 형식 지정자가 주어져있지 않다면 ISO8601 형식으로 나타난다. 날짜형식 지정자는 자바의 속도가 느린
SimpleDateFormat 클래스의 시간형식 문자열과 같은 문법을 수용했다.
더 빠른 성능을 위해 %d{ISO8601}, %d{ABSOLUTE}, %{RELATIVE}(프로그램 시작 후 경과시간의 밀리세컨드값을 나타내며
가장 빠르다) 또는 %d{DATE} 를 사용하며 각각은
log4j의 ISO8601DateFormat, AbsoluteTimeDateFormat, RelativeTimeDateFormat, DateTimeDateFormat 날자형식을 사용한다.
- %l : 소스코드의 위치정보를 출력한다. %C. %M(%F:%L) 의 축약형이다.
- %C : 로깅요청을 일으킨 호출자의 완전한 클래스이름을 출력한다.
예를들어 "org.apache.xyz.SomeClass"라는 클래스 이름이 있을때, %C{1} 은 "SomeClass"를 출력한다.
{1} 는 "완전한 클래스이름의 마지막 하나의 구성요소를 출력하라" 는 뜻이다. 만약 {n} 이 없다면
기본적으로 완전한 클래스 이름을 출력한다.
- %M : 로깅요청을 일으킨 메소드를 출력한다.
- %F : 로깅요청을 일으킨 파일 이름을 출력한다.
- %L : 로깅요청을 일으킨 곳의 행번호를 출력한다.
- 각 클래스나 패키지별로 로그를 따로 설정할수도 있다. 설정방법은 아래와 같다.
Class 혹은 Package 별로 다른 출력 방식을 적용할 수 있다.
log4j.properties 설정
# Root Logger
log4j.rootLogger=INFO
# 바로 위처럼 Root Logger에 어떤 Appender도 설정하지 않으면 Root Logger는 Log Message를 출력하지 않는다.
# Console에서조차 다른 Package의 Log Message에는 관심이 없다면 위와 같이 하자 ^^/
# Adel Logger
log4j.logger.adel.test=INFO, console
# adel.test Package 하위의 Class에서만 Log Message를 출력한다.
log4j.logger.adel.test.sample_1=INFO, file-1
log4j.logger.adel.test.sample_2=INFO, file-2
# 각 Package 마다 다른 Appender를 적용시켜서 Package 별로 다른 파일에 Log Message를 출력한다.
# Console Appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m%n
# File Appender
log4j.appender.file-1=org.apache.log4j.RollingFileAppender
log4j.appender.file-1.File=test-1.log
log4j.appender.file-1.MaxFileSize=10MB
log4j.appender.file-1.MaxBackupIndex=10
log4j.appender.file-1.layout=org.apache.log4j.PatternLayout
log4j.appender.file-1.layout.ConversionPattern=%d %p [%c] - %m%n
# File Appender
log4j.appender.file-2=org.apache.log4j.RollingFileAppender
log4j.appender.file-2.File=test-2.log
log4j.appender.file-2.MaxFileSize=10MB
log4j.appender.file-2.MaxBackupIndex=10
log4j.appender.file-2.layout=org.apache.log4j.PatternLayout
log4j.appender.file-2.layout.ConversionPattern=%d %p [%c] - %m%n
## Log4J Config Property File
#log4j.rootLogger=INFO, console
log4j.rootLogger=DEBUG, console, save
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%C][%M][%-5p][%d{yyyy/MM/dd HH:mm:ss}] %m%n
log4j.appender.save=org.apache.log4j.DailyRollingFileAppender
log4j.appender.save.Threshold=INFO
log4j.appender.save.ImmediateFlush=true
#log4j.appender.save.File=/sec/batch/gsparse/log/log
log4j.appender.save.File=c:/logs/log.txt
log4j.appender.save.Append=true
log4j.appender.save.DatePattern='.'yyyyMMdd
log4j.appender.save.layout=org.apache.log4j.PatternLayout
log4j.appender.save.layout.ConversionPattern=[%C][%M][%-5p][%d{yyyy/MM/dd HH:mm:ss}] %m%n