2013년 12월 11일 수요일

001. Log4j를 이용한 로그 남기기

/*
  1. Log4j를 이용한 로그 남기기

  프로그램을 개발하다 보면 오류메시지를 확인하거나 분기에 변수를 확인하기 위해
  디버깅모드를 사용한다. 만약 이런 디버깅 모드를 사용하지 못하는 경우라면 java의
  경우 System.out.println()을 이용해 콘솔에 로그를 남기고 문제점을 추적하는게 대부
  분이다.
개발단계에선 로그를 남기며 확인 하지만 실제 서비스를 하거나 배포를 할때 이런식의
  로그를 남기는 것은 낭비다. 먼저 배포된 경우 프로그램의 동작 원리가 공개될 수도 있
  으므로 해선 안되고, 어쩌면 System.out.println()으로 인해 약간의 성능 저하를 감당해
  야 할 지도 모르겠다. 그리고 개발이 완료된 후 System.out.println()식의 로그는 일일
  이 해제를 해주어야 하는데

Log4j를 이용하면 외부의 설정 변경으로 로그출력여부를 결정할 수 있다.
apache에선 log4j라는 logging framework를 제공한다.

Log4j 다운받기 --   http://logging.apache.org/


log4j 2.0도 있지만 이것은 jdk 5.0이상 버젼에서만 사용 가능하다고 한다.
  ** 2.0은 아직 릴리즈 된 것은 아니라고 하네요!
압축을 해제하면 log4j-x.x.xx.jar 파일이 보일 것이다.
프로젝트에 추가하여 다음코드를 통해 샘플을 확인하자.
 */
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.BasicConfigurator;
public class Log4J_Sample001 {
static Logger logger = Logger.getLogger(Log4J_Sample001.class);
public static void main(String[] args) {
// 별도의 설정(예를들어 프로퍼티,XML등)이 없으므로 콘솔출력을 위해
// 기본으로 설정 한다.
BasicConfigurator.configure();
// 로그레벨 순서는 DEBUG INFO WARN ERROR FATAL 이다.
logger.debug("[logger.debug()]"+"디버그");
logger.info("[logger.info()]  "+"정보");
logger.warn("[logger.warn()]  "+"경고");
logger.error("[logger.error()]"+"에러");
logger.fatal("[logger.fatal()]"+"심각한 에러");
// Level을 이용한 출력
logger.log(Level.DEBUG, "디버그 프로퍼티를 이용");


}
}


출력결과
===========================================================
{경과시간} [{호출스레드}] {레벨} {클래스} {작성한내용}
===========================================================
0 [main] DEBUG Log4J_Sample001  - [logger.debug()]디버그
0 [main] INFO Log4J_Sample001  - [logger.info()]  정보
0 [main] WARN Log4J_Sample001  - [logger.warn()]  경고
0 [main] ERROR Log4J_Sample001  - [logger.error()]에러
0 [main] FATAL Log4J_Sample001  - [logger.fatal()]심각한 에러
0 [main] DEBUG Log4J_Sample001  - 디버그 프로퍼티를 이용

출력 결과는 위와 같다. 여기서 주목해야할 점은 Logger.getLogger(Log4J_Sample001 .class);
코드에서 StartApp.class부분이다. 이것은 그냥 String로 들어가도 되는데 저런식으로 클레스를 지정해주면 해당 클레스의 정보(패키지포함)까지 출력하게 된다.
만약 클레스를 전달하지 못하는경우(예를들어 jsp에서 처리할때)는 Logger.getLogger("CallJsp.jsp");로 해줘도 무관하다.

댓글 없음:

댓글 쓰기