프로그래밍/Java

자바 로그 관련...

jonelove71 2009. 8. 6. 19:29

1. 로그 관련 성능
다음코드는 로그레벨에 관계없이 String 객체의 값을 연결하는 + 연산이 실행된다.

logger.warn("blar blar. some="+some+". other="+other+".and another"+another);

+연산은 오직 로그를 위한 것이고 warn() 메소드는 실제 로그레벨이 warn미만일 경우에만
전달된 값을 로그에 남긴다. 만약 로그레벨이 warn보다 크다면 결과적으로 필요없는 연산을 하게 된 것이다. 아쉽게도 자바에서는 이를 피할수 있는 근본적인 방법이 없다. 다음과 같이 logger의 로그 메소드를 호출하기 전에 로그 레벨을 파악해 불필요한 연산을 피해야 한다.

logger.isWarnEnabled(){
logger.warn("...");
}

대부분의 로그 프레임워크는 이와 같은 로그레벨을 확인하기 위한 방법을 제공하고 있다.


2. track stack을 String 으로 받기
Writer writer=new StringWriter();
e.printStackTrace(new PrintWriter(writer));
String stackTrace=writer.toString();

3.로그레벨에 따른 쓰임새
 DEBUG : 디버깅을 위한 목적이며 평상시라면 보이지 않을 내용이다. 자세할 수록 좋다.
 INFO : 관리자에게 정보를 제공한다. 버그와 관계없는 내용이다.
 WARN : 뭔가 잘못됐다는 것을 나타낸다. 이경우 비정상적인 상황은 발생했지만 정상적인   상황으로 처리했다는 것을 의미한다.
 ERROR : 시스템 운영에 문제가 있을 경우다. 예외를 처리하지 못하고 로그로 남기는 경우가 여기에 속한다.
 FATAL : 시스템 운영조차 불가능한 경우다. 로그조차 남기지 못하기도 한다.

출처 : 마소 2009년 07월호