Log4j를 사용할 때 if(log.isDebugEnabled() 또는 if(log.isInfoEnabled()를 쓰는 이유

프로젝트에서 우리는 자주 이런 코드를 볼 수 있다.
if (logger.isDebugEnabled()) {
    logger.debug(message);
}

쉽게 말하면 isDebugEnabled 방법으로 판단하면 성능을 향상시킬 수 있습니다!!
어떤 사람들은 왜 이렇게 쓰는지 모르겠다.어떤 사람들은 로그 출력을 제어하기 위해 다음 코드에 대해 다음과 같이 생각한다.
logger.debug(message);

이렇게 쓰면 로그 단계를 info로 조정해도 로그를 출력할 수 있다는 게 이들의 견해다.
사실 debug () 방법에서 로그의 등급을 반역했습니다.다음은 isDebugEnabled()의 소스입니다.
public boolean isDebugEnabled() {
    if(repository.isDisabled( Level.DEBUG_INT))
        return false;
    return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel());
}

다음은 debug()의 소스입니다.
public void debug(Object message) {
    if(repository.isDisabled(Level.DEBUG_INT))
        return;
    if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) {
        forcedLog(FQCN, Level.DEBUG, message, null);
    }
}

debug () 방법에서 isDebug Enabled () 방법과 같은 판단을 한 것을 볼 수 있습니다.
여기서 우리는 로그를 잃어야 하는 곳이라면 isDebugEnabled를 판단하지 않고 직접 debug 방법을 조정하는 것이 더 편리하지 않겠는가?
정부는 효율을 고려해 구체적인 상황을 보고 결정한다고 말한다.
다음 코드를 살펴보겠습니다.
logger.debug("The money is " + getTotalMoney());

우리의 로그 단계를 info로 설정하면 이 말은 로그를 출력하지 않지만, 이 방법은 호출됩니다.이 방법을 호출하려면 반드시 파라미터를 제공해야 한다.getTotalMoney() 메서드가 반환하는 결과는 매개변수의 일부입니다.getTotalMoney()가 10초, 10초 후에 debug() 방법에 들어간다고 가정하면 첫 번째 판단에 부딪힌다.
if(repository.isDisabled(Level.DEBUG_INT))
    return;

여기서 돌아왔습니다.결과적으로 로그는 출력되지 않았지만 파라미터를 구성하는 데 10초가 걸렸다.여기는 얻는 것보다 잃는 것이 더 많은 것이 분명하다.비록 실제 응용에서 이런 파라미터를 구성하는 데 10초가 걸리는 경우는 거의 없지만, 병발 수가 많으면 이렇게 쓰면 시스템의 성능에 영향을 줄 수 있다.이럴 때는 다음과 같이 써야 한다.
if(logger.isDebugEnabled()){
    logger.debug("The money is " + getTotalMoney());
}

debug의 매개 변수가 간단하면logger를 직접 쓸 수도 있습니다.debug의정부의 견해에 따르면logger를 한 번 집행한다.isDebugEnabled () 라는 판단에 걸리는 시간은 대략 로그 작성 시간의 만분의 1 정도입니다.비록 이 비율은 매우 작지만,
그러나 프로그램 중 어느 곳에서든 병발하는 환경에 두면 우리는 다시 고려해야 한다.
그래서 나는 우리가 개발할 때 구체적인 상황에 따라 다른 문법을 선택해야 한다고 생각한다.
처음으로 이곳에 글을 올렸는데 비록 자신의 기술은 매우 형편없지만 못생긴 며느리는 어쨌든 어머니를 만나야 한다. 기술은 백화쟁오이고 한 집안이 홀로 커서는 안 된다. 그렇지 않으면 전 세계에서 그 몇 명의 대가들이 기술 문장을 쓸 수밖에 없다.여기서 자신의 소감을 쓰고 교류 기술을 교류하며 옥을 끌어들이는 것은 어쨌든 의미 있는 일이다.
원인 분석이 일리가 있군~
전재:http://www.reader8.cn/jiaocheng/20121020/1952207.html

좋은 웹페이지 즐겨찾기