추적 할 공용 메서드가 두 개 있습니다. 메서드 중 하나가 다른 메서드를 반복적으로 호출합니다. 제가하고 싶은 것은 외부에서 호출 된 메소드 만 추적하는 것입니다. 여기 로깅 메시지를 동적으로 건너 뜁니다.
가 무슨 뜻인지 설명하는 간단한 클래스의 : 다른 곳에서 내 코드에서public class LoggingExample {
private static final Logger logger = LoggerFactory.getLogger(LoggingExample.class);
public static final String USER_ROOT = "/home/waisbrot";
/** could be called by fileExistsRobust *or* from outside */
public static boolean fileExists(String filename) {
logger.trace("Checking for file {}", filename);
File f = new File(filename);
return f.exists();
}
/** always gets called from outside */
public static boolean fileExistsRobust(String filename) {
logger.trace("Checking for any varient of {}", filename);
if (fileExists(filename))
return true;
for (String prefix : prefixes) { // this list is 100 items long
if (fileExists(prefix + filename));
return true;
}
return false;
}
}
, 나는 나는 그것의 로깅 메시지가 인쇄 취득하는 경우
fileExists
를 호출 할 수 있습니다 (I 그것을 추적하고있어 가정) . 하지만 보다 전화를 걸면
에 로그 메시지가 표시되지만
fileExists
은 표시되지 않습니다.
두 방법을 모두 추적하고 싶지만 두 번째 방법을 호출 할 때 출력에 묻혀 있습니다. 내가 원하는 것을 이해하기 위해 Logback을 구성 할 수 있었으면 좋겠다. 그러나 문서에서 유용한 것이 아무것도 없다. 내가 fileExistsRobust
을 입력하고 fileExists
에서 테스트 할 때 깃발을 넘길 수는 있지만 (정적 메서드이기 때문에) 하나 이상의 스레드와 추악해질 것입니다. 그리고 많은 로깅 인프라로 클래스를 오염시키기 시작한 것처럼 보입니다. MDC를 사용하여 정보를 저장할 수는 있지만 MDC의 남용과 같습니다.
누구나 전에이 상황에 처해 있습니까? 어떻게 처리 했지?
나는 당신이 먼저 언급 한 사적 내부 솔루션을 좋아한다. –