/*
Log4j를 이용해 간단히 콘솔에 로그를 출력하는 것을 해봤다면
이제 좀 더 실용적인 로깅 방법에 대해 살펴보자.
xml을 이용해서도 가능하지만 properties는 xml보다 직관적이지 않나 싶다.
단지 key와 value로 구성되어 있으니까 ..
먼저 log4j.properties 파일을 생성한다.
이건 그냥 파일이면 상관 없다.
뭐 이클립스에서 무엇을 들어가 생성하고 .. 그런게 전혀 필요없다는 얘기다.
단, 경로는 잘 지켜줘야 한다.
일반적인 app일 경우 .class가 생성되는 위치
(일반적으로 이클립스에서 java project를 이용하면 bin에 .class가 생성 된다.
소스는 당연히 src에 ..)에 넣어주면 된다.
웹이라면 WEB-INF를 이용하면 된다.
먼저 간단한 log4j.properties를 보면 다음과 같다.
#로그설정(로그레벨 DEBUG ~ FATAL, OFF일경우 로그사용 안함), 사용 로그 이름
log4j.rootLogger=DEBUG, stdout, rolling
#stdout 로그 레벨 설정
log4j.appender.stdout.Threshold=WARN
#stdout 콘솔 어펜더로 사용
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#stdout 패턴 레이아웃 사용
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#stdout 레이아웃 패턴 정의
log4j.appender.stdout.layout.ConversionPattern=%t> [%d{yyyy-MM-dd HH:mm:ss}] [%c{1}] [%L] [%p] %m %n
#롤링파일 업펜더 사용
log4j.appender.rolling=org.apache.log4j.RollingFileAppender
#롤링파일 로그에 대한 파일명 (경로 설정 가능 함)
log4j.appender.rolling.File=output.log
#로그파일 최대 크기
log4j.appender.rolling.MaxFileSize=1KB
#최대파일이 넘어갔을 경우 백업
log4j.appender.rolling.MaxBackupIndex=1
#롤링파일 패턴 레이아웃 사용
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
#롤링파일 패턴 정의
log4j.appender.rolling.layout.ConversionPattern=%t> [%d{yyyy-MM-dd HH:mm:ss}] [%c{1}] [%L] [%p] %m %n
그냥 보기에도 어렵지 않은 내용이다.
최상단에 있는 log4j.rootLogger 에 Log4j의 설정이 들어가는데 여기에 로그를 출력할 레벨을
설정 한다. 만약 로그를 사용하지 않을경우 'OFF'로 성정하는데 주목하자.
그리고 그 후에 오는 것들은 각각의 로그에 대한 설정이다.
stdout와 rolling가 있는데 stdout는 콘솔출력을 위한 로그고 rolling는 파일 출력을 위한
로그 설정이다.
콘솔출력에서 봐야할 것은 log4j.appender.stdout.Threshold 부분인데 지금의 설정대로라면
DEBUG 레벨까지 출력하게 되어있다.
하지만 stdout에선 WARN으로 되어있으므로, stdout에서 출력되는 로그들은 WARN의 레벨 이상만
보여주게 된다. 롤링파일을 보면 남길 파일명을 기록하는 부분과 로그파일 최대크기, 백업
인덱스가있는데 먼저 로그파일의 최대크기는 말그대로 '내가 설정한 로그파일이 가질 최대의
크기'를 의미한다. 그리고 백업은 output.log.1 하는 식으로 인덱스에 숫자를 붙혀 나가게
되는데 이런식으로 로그가 남다가 풀이되면 백업 후 새로운 파일을 만들어 기록하게 된다.
자. 만약 로그파일 최대 크기가 넘어갔고, 백업을 1개만 했는데 이미 백업파일까지 존재한다.
그렇다면 이후의 로그들은 어찌될까? 이럴경우엔 이전 로그정보는 사라지고 계속 추가되게
된다. 만약 이와 반대로 되어있다면 .. 이건 재앙일 것이다.
*/
import org.apache.log4j.*;
public class Log4J_Sample003_UseProperties {
// 이건 더이상의 설명이 필요 없죠.
static Logger logger = Logger.getLogger(Log4J_Sample003_UseProperties.class);
public static void main(String arg[]) {
// 로그를 계속 쌓아두기 위해 MAX_COUNT값을 정의 함.
final int MAX_COUNT = 1000;
for (int i=0;i<MAX_COUNT;i++) {
// 각각의 레벨에 맞춰 로그를 남김
logger.debug("debug 로그");
logger.info("info 로그");
logger.warn("warn 로그");
logger.error("error 로그");
logger.fatal("fatal 로그");
}
}
}
댓글 없음:
댓글 쓰기