2012-03-01 4 views
3

org.jboss.logging.Logger 클래스를 사용하고 있으며 부적절한 것으로 보입니다. 오류나 경고가있을 경우 logger.error("error message") 또는 logger.warn("warning message")을 사용하기 만하면 jboss-log4j.xml 파일의 설정에 따라 표시됩니다.JBoss에서 isTraceEnabled() 함수를 사용해야하는 이유는 무엇입니까?

그러나 기존 jboss 코드 인 this discussionthis link을 기반으로하면 추적을 사용할 때 logger.isTraceEnabled()을 사용하여 활성화되었는지 여부를 먼저 결정해야합니다. 왜 나는 혼자서 흔적을 남기지 만하는 것일까 요?

답변

6

"반드시"하지 않아도됩니다. 그것은 그것없이 잘 작동 할 것이다. 그러나 TRACE 수준의 로깅은 대단히 장황한 경향이 있으며 궁극적으로 실제로 파일에 기록되지 않더라도 CPU 시간의 상당 부분을 차지할 수 있습니다. 로깅 문에 if 체크를 넣으면 오버 헤드를 피할 수 있습니다.

다른 좋은 품질의 코드베이스도 DEBUG 및 INFO 레벨 로깅에 대해 동일한 작업을 수행하므로 TRACE에 국한되지 않습니다.

log4j manual relating to peformance 섹션을 참조하십시오.

+0

이 있습니다. 따라서 성능이 좋습니다. 모든 요청에 ​​대해 발생하는 정보 수준의 작업에 특히 적합합니다. – JoshC13

+0

알다시피, 사용하는 로거에 따라 다릅니다. 예를 들어, org.slf4j.impl.Log4jLoggerAdapter는 내부적으로이 체크를하므로, 전혀하지 않아도됩니다. IMHO 좋은 로거가 내부적으로이 체크를하는 것이 가장 의미가 있습니다. 특히 이미 알고 있듯이 ... 당신의 메시지가 isTraceEnabled()를 호출하는 것보다 효율적이지 않은 방법으로 빌드되는 경우 얻을 수있는 유일한 성능 향상입니다 http://stackoverflow.com/questions/21281048/should-i-be-using-slf4j-istraceenabled-or-not) – ndtreviv

관련 문제