1. Commons Logging
Commons Loggin API는 자카르타 Commons에 포함되어 있는 프로젝트들이 로거로 사용하는 API이다. Commons Logging API는 자체적으로 로깅 기능을 구현하고 있지는 않으며, 로깅 요청을 Log4J나 자바1.4로깅 API와 같이 이미 존재하는 로깅 API에 전달하는 다리 역할을 한다. 즉, Commons Logging API를 사용하면 Log4J를 사용하든 자바 1.4의 로깅 API를 사용하든지에 상관없이 동일한 방식으로 로깅 코드를 작성할 수 있게 된다.
Loggin API를 사용하기 위해서는 다음의 두 클래스만 사용하면 된다.
- org.apache.commons.logging.Log
- org.apache.commons.logging.LogFactory
LogFactory는 사용자의 시스템에 알맞은 Log를 생성해주는 팩토리 클래스이다.
Log는 인터페이스라서 실제로 로그를 기록하는것은 Log 인터페이스의 구현체를 통해서 연결된 Log4J나 자바1.4의 로깅 API이다.
(사용예)
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class IbatisWithMysqlBoardDAO extends SqlMapClientDaoSupport implements BoardDAO {
...
protected final Log logger = LogFactory.getLog(getClass());
public List findBoardList(int currentPage, int countPerPage) throws SQLException {
...
logger.debug("로그테스트");
...
}
...
}
LogFactory는 다음과 같은 순서로 Log구현체를 선택하게 됩니다. (다음 생략...)
Log4J 라이브러리 파일을 CLASSPATH에 추가시켜주면 LogFactory는 탐색순서에 의해 Log구현체로 Log4J를 사용한다.(2순위)
Log구현체는 로그를 기록할 때 Commons Logging API의 로그 레벨을 실제로 사용하는 로깅 API의 로그 레벨로 알맞게 매핑시켜준다.
Commons Logging 로그레벨 |
Log4J의 로그레벨 |
자바 1.4의 로그 레벨 |
TRACE |
DEBUG |
FINEST |
DEBUG |
DEBUG |
FINE |
INFO |
INFO |
INFO |
WARN |
WARN |
WARNING |
ERROR |
ERROR |
SEVERE |
FATAL |
FATAL |
SEVERE |
로그레벨의 판단을 위한 메소드
boolean isTraceEnabled()
boolean isDebugEnabled()
boolean isInfoEnabled()
boolean isWarnEnabled()
boolean isErrorEnabled()
boolean isFatalEnabled()
2. Log4J
Lo4J의 로그레벨(내림차순)
- Level.FATAL : 치명적인 에러
- Level.ERROR : 에러
- Level.WARN : 경고
- Level.INFO : 정보
- Level.DEBUG : 상세정보
Log4J의 구조
: Log4J는 크게 Logger, Appender, Layout의 3가지 요소로 구성되어 있다.
Appender
- org.apache.log4j.ConsoleAppender : 콘솔에 로그메시지 출력
- org.apache.log4j.FileAppender : 파일에 로그 메시지를 기록
- org.apache.log4j.RollingFileAppender : 파일에 로그 메시지를 기록하며, 파일이 일정 크기가 되면 다른 이름으로 저장하고, 새롭게 로그 메시지를 기록하기 시작한다.
- org.apache.log4j.DailyRollingFileAppender : 파일에 로그 메시지를 기록하며, 하루단위로 로그파일 변경
- org.apache.log4j.net.SMTPAppender : 로그메시지를 이메일로 전송한다.
- org.apache.log4j.nt.NTEventLogAppender : NT의 이벤트 로그 시스템에 로그 메시지를 전송한다. 윈도우즈 시스템만 사용 가능
Layout
: Layout은 org.apache.log4j.PatternLayout을 일반적으로 사용한다.
PatternLayout에서 지원하는 패턴
1) C : 로그메시지를 기록하려는 클래스의 이름 출력! 패키지 계층 제어 가능 ex) %C{2}
2) d : 메시지 기록 시간 출력! 포멧 지정 가능! 포멧은 java.text.SimpleDateFormat과 같은 포맷 ex) %d{yyyy-MM-dd HH:mm:ss}
3) p : 로그 메시지의 우선순위 출력
4) m : 로그 메시지 자체를 출력
5) M : 로그 메시지를 기록하려는 메소드의 이름 출력
6) n : 플렛폼의 라인 구분자를 출력
7) % : %%는 '%'자체를 출력
Log4J 설정파일 다루기
log4j.rootLogger = [level], appender_name, ...
log4.logger.logger_name = [level|INHERITED], appender_name,...
log4j.additivity.logger_name = true|false
log4j.appender.appender_name = [appender_calss_name]
log4j.appender.appender_name.option1 = value1
log4j.appender.appender_name.option2 = value2
log4j.appender.appender_name.layout = [layout_calss_name]
log4j.appender.appender_name.layout.option1 = value1
log4j.appender.appender_name.layout.option2 = value2
Log4J 설정파일 예
log4j.rootLogger=WARN, FILE
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=d:/dev/log/error.log
log4j.appender.FILE.Threshold=ERROR
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[%d] %-5p %l - %m%n
log4j.logger.com.kth.swaf.web.filter=INFO, FILTER
log4j.appender.FILTER=org.apache.log4j.ConsoleAppender
log4j.appender.FILTER.Threshold=INFO
log4j.appender.FILTER.layout=org.apache.log4j.PatternLayout
log4j.appender.FILTER.layout.ConversionPattern=%-5p - %m%n
log4j.logger.com.kth.swaf=WARN, SWAF
log4j.appender.SWAF=org.apache.log4j.ConsoleAppender
log4j.appender.SWAF.Threshold=WARN
log4j.appender.SWAF.layout=org.apache.log4j.PatternLayout
log4j.appender.SWAF.layout.ConversionPattern=[%d] %-5p - %m%n