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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Log4j 지정한 클래스의 로그가 지정한 파일에 기록됨LOG4J 프로필 섹션 allerror를 정의해서 그에게 com을 지정합니다.cvicse.inforguard 패키지 아래의 로그는 mc로 출력해야 합니다.log 파일에서 사용할 때 클래스 이름을 지정합니다.class...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.