2011-11-17 2 views
0

이 코드는 :로깅 스위치 실현

public class MyActivity extends Activity { 

    private final boolean logging = getResources().getBoolean(R.bool.logging); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     if(logging) Log.d("my_log", "some text here"); 

     // some onCreate code... 
    } 
} 

는 NullPointerException이 발생한다.

하지만이 하나

public class MyActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     final boolean logging = getResources().getBoolean(R.bool.logging); 
     if(logging) Log.d("my_log", "some text here"); 

     // some onCreate code... 
    } 
} 

하지 않습니다.

부울 리소스로 전체 애플리케이션에서 로깅을 전환하는 주요 아이디어.

클래스의 모든 함수에 대해이 변수를 성공적으로 선언 할 수 있지만 한 번만 전체 클래스에 대해 수행 할 수 있습니까?

+0

editet 질문은 – mpugach

답변

0

문자열 리소스에 값을 넣는 대신 특수 변수에 정적 변수를 사용했습니다.

public class constants { 

public static final boolean logging = true; 

} 

그래서이 모든 활동에서 액세스 할 수 있습니다

private boolean logging = constants.logging; 
2

적절한 로깅 프레임 워크를 사용 해본 적이 있습니까? 당신은 SLF4J API를 사용하는 경우

당신은 스위치를 외부 로그 문을 생성 여부를 잘 문서화 된 방법으로 설정

log.debug("A={}, B={}", a, b) 

처럼 물건을 쓸 수 있습니다. 또한 slf4j {} -construct는 이후에 까지 a.toString() 및 b.toString()에 대한 호출을 지연시켜 로그 메시지가 실제로 생성되어야한다고 결정했습니다.

slf4j는 API입니다. 선택할 여러 백엔드가 있습니다. 우선 "간단한"백엔드를 선택할 수 있습니다.

소개를 위해 http://slf4j.org/manual.html을 참조하십시오.

+0

당신을 감사 문제에 초점을 맞 춥니 다. 임 android.util.Log 프레임 워크를 사용하여, 당신은 나에게 동일한 프레임 워크에 대한 외관을 제안합니다. slf4j 구현하려면 많은 코드를 다시 작성해야합니다. 일을 간단하게 유지할 수 있습니다. 전 세계적으로 설정된 변수가 필요합니다. – mpugach