2011-02-09 2 views
0

나는 항상 this.getClass().getSimpleName()을 첫 번째 매개 변수로 사용하는 로그 문을 사용합니다. 이 매크로를 일종의 매크로 상수에 넣고 내 모든 로그 문에서 사용하고 싶습니다. 하지만 Java에는 C++과 달리 간단한 메커니즘이 없다는 것을 알게되었습니다.Java에서 매크로 대체에 대한 대안

Java에서 이러한 종류의 기능을 구현하는 가장 좋은 방법은 무엇입니까?

Log.v(this, "Starting LocIden service..."); 

그리고 Log에서 다음과 같이

(안드로이드)에서 내 예를 로그 문

Log.v(this.getClass().getSimpleName(),"Starting LocIden service..."); 
+0

디버깅을 위해이 명령문을 작성 하시겠습니까? 그렇다면 디버거 도구가 로그를 피하는 데 도움이되지 않습니까? – jzd

답변

5

자바 매크로를 가지고 있지 않지만 코드가 훨씬 더 짧은 할 수 있습니다 ..입니다 클래스 :

public void v(Object object, String s) 
{ 
    _v(object.getClass().getSimpleName(), s); 
} 

또 다른 접근 방법은 호출 스택을 검사하는 것입니다.

+0

감사 마크. 그게 훨씬 더 깨끗합니다 :-) – Karthik

0

또 다른 접근법은 안드로이드가 로깅 기능에 대해 제안한 바를 따르는 것입니다.

Log.v(TAG, "Message"); 

여기서 TAG은 클래스의 개인 정적 최종 문자열입니다.

+0

그건 내 초기 접근 방식 이었지만 클래스 이름을 직접 사용할 수 있다고 생각했는데 다음 질문이 나타났습니다. – Karthik

+0

정적 최종 문자열 메서드가 마음에 들었습니다. 그렇게하면 클래스의 이름이 아닌 다른 이름으로 바꿀 수 있습니다. – Falmarri

+0

나도 여기지만 매크로 대체와 같은 것을 성취 할 수있는 방법이 있는지 알고 싶었습니다. 그렇게하면 모든 클래스에서 일반 호출을 사용할 수 있습니다. – Karthik

0

적절한 로깅 프레임 워크 (예 : slf4j)를 사용하십시오. 로그하는 각 클래스에는 자체 로거가 있으므로 클래스 메서드를 로그 메서드 호출에 전달할 필요가 없습니다.

Logger logger = LoggerFactory.getLogger(this.getClass()); 

logger.debug("Starting service"); 
//... 
logger.debug("Service started"); 
1

KARTHIK, 대부분의 로깅 도구를 사용하면 출력 형식과 매개 변수 중 하나의 log4j에서, 마크가 언급 한 방법 (스택 검사) 예를 들어

를 사용하는 클래스의 이름입니다을 지정할 수 있습니다 클래스 이름을 참조하는 매개 변수는 % C입니다.

+0

Augusto.에 대한 답장을 보내 주셔서 감사합니다. 로깅 목적으로 Android SDK의 "Log"유틸리티를 사용하고있었습니다. 이 특정 기능을 직접 사용할 수있는 것은 아닙니다. – Karthik