가 나는 기록이 구문을 사용하는 일반적인 이유 로깅 에 대한 간단한 질문이 있습니다로깅 구문에 대한 자세한
LOG.debug("invalidate {}",_clusterId);
을하지이 :
LOG.debug("invalidate" + _clusterId);
가 나는 기록이 구문을 사용하는 일반적인 이유 로깅 에 대한 간단한 질문이 있습니다로깅 구문에 대한 자세한
LOG.debug("invalidate {}",_clusterId);
을하지이 :
LOG.debug("invalidate" + _clusterId);
예를 들어, 로깅 수준을 INFO로 설정했다고 가정하십시오. 디버그 수준의 메시지를 완전히 무시하고 싶습니다. 그러나 log 메소드는 메소드가 입력 될 때까지 매개 변수를 얻은 후에 로그 레벨을 점검 할 수 없습니다. 따라서 매개 변수가 필요한지 여부를 모르는 경우 매개 변수를 평가하지 않아도되는 것이 좋습니다.
로깅이 info로 설정되어 있어도 _clusterId에서 toString이 호출되면 그 결과 문자열이 앞의 문자열과 연결됩니다. 그런 다음 메소드가 입력되면 로거는 디버그 레벨이 로깅 할 필요가 없다는 것을 알게되고 새로 생성 된 문자열을 버리고 메소드를 종료합니다.
첫 번째 예제에서는 디버그 수준 로깅을 사용하지 않으면 _clusterId가 toString을 호출하지 않고 로그 메시지가 작성되지 않습니다. toString을 호출하면 속도가 느려지거나 쓰레기가 생성 될 수 있습니다. 어쨌든 아무 것도 기록되지 않는 경우에는 toString을 사용하지 않는 것이 좋습니다.
public void debug(Object message, Throwable t) {
if(repository.isDisabled(Level.DEBUG_INT))
return;
if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel()))
forcedLog(FQCN, Level.DEBUG, message, t);
}
: 여기
은 (로거의 슈퍼 클래스입니다)의 log4j의 org.apache.log4j.Category에 디버그 방법에 대한 소스 코드의
당신은 몇 가지 매개 변수를 사용하여 문이있을 때 패턴을 매개 변수 다음에 문자열로 쓰면 코드가 더 읽기 쉽습니다. 또한 많은 임시 문자열 객체를 불필요하게 만드는 것을 피하면서 더 효율적일 수 있지만 로깅 프레임 워크가 내부적으로 보간을 구현하는 방법에 따라 다릅니다.
첫 번째 사항을 보려면 문자열 연결을 사용하는 해당 줄과 비교하십시오.
LOG.debug("{}: Error {} while processing {} at stage {}", currentFile,
exception.getMessage(), operation.getName(), operation.getStage())
매개 변수가 하나 뿐인 경우 일반적으로 사용하는 매개 변수와 별개로 사용하는 매개 변수는 실제로 중요하지 않습니다.