Android Developer

[Android] Log

졸려질려 2019. 7. 10. 18:05
반응형

 

[Log]

Log

  • 로그 출력을 담당하는 API

  • 일반적으로 Log.v(), Log.d(), Log.i(), Log.w(), Log.e() 메서드를 사용한다.

  • logcat 창에서 로그들을 볼 수 있다.

  • 자세한 정보의 순서는 ERROR, WARN, INFO, DEBUG, VERBOSE 이다.

    • VERBOSE : 개발 할 때 를 제외하고 응용 프로그램에 컴파일 해서는 안된다.
    • DEBUG : 컴파일되지만 런타임에 제거 된다.
    • ERROR, WARN, INFO : 항상 보관 된다.
  • 클래스 내에서 TAG 상수를 선언하는 좋은 예시

    private static final String TAG = "MyActivity";

    Log.v(TAG, "index=" + i);

    • Log.d 로 전달할 문자열을 작성할 때 컴파일러는 StringBuilder 를 사용한다. 그리고, 적어도 세 할당이 발생한다. : StringBuilder, Buffer, String
    • 실제로 또 다른 버퍼 할당과 복사가 진행되고 심지어 GC 에 대한 압박도 더 커진다. 즉 로그 메시지가 필터링 된다면 중요한 일을 할 수 있고 상당한 오버헤드를 발생시킬 수 있다.
  • 위에서 선언한 상수는 로그 메서드를 호출 할 때 사용된다.

Log - Constant

  • Constant는 모두 println 메서드를 위해 사용되는 우선순위를 담는 상수이다.

    public static final int ASSERT = 7;

    public static final int WARN = 5;

    public static final int DEBUG = 3;

  • public static final int VERBOSE = 2;

  • public static final int INFO = 4;

  • public static final int ERROR = 6;

Log - Public Method

  • String tag : 로그 메시지의 근원지를 식별하지는 데 사용된다. 보통 로그가 발생하는 클래스나 액티비티를 식별한다.

  • String msg : 기록하고 싶은 메시지를 의미한다. 메서드의 인자값이 tag와 msg만 있을 경우 msg 값은 null 로 설정 할 수 없다.

  • Throwable tr : 로그에 대한 Exception 값을 의미한다.

  • wtf 메서드를 제외한 메서드들은 API 1 에서 추가되었다.

  • Error

    • 오류 와 관련된 로그를 출력한다.

    public static int e(String tag, String msg, Throwable tr)

  • public static int e(String tag, String msg)

  • WARN

    • 경고 와 관련된 로그를 출력한다.

    public static int w(String tag, Throwable tr)

    public static int w(String tag, String msg)

  • public static int w(String tag, String msg, Throwable tr)

  • Debug

    • 디버그 와 관련된 로그를 출력한다.

    public static int d(String tag, String msg, Throwable tr)

  • public static int d(String tag, String msg)

  • INFO

    • 정보 와 관련된 로그를 출력한다.

    public static int i(String tag, String msg, Throwable tr)

  • public static int i(String tag, String msg)

  • VERBOSE

    • 말이 많다 는 뜻으로 별로 중요하지 않은 것을 의미한다.

    public static int v(String tag, String msg)

  • public static int v(String tag, String msg, Throwable tr)

  • What a Terrible Failure

    • API LEVEL 8 에서 적용되었다.

    public static int wtf(String tag, String msg)

    • tag와 msg 모두 null이 될 수 있다.
    • 절대 발생하면 안될 상황을 보고 한다.
    • 에러는 항상 콜스택과 함께 ASSERT 레벨로 로그 기록된다.
    • 시스템 설정에 따라서 보고는 DropBoxManager 에 추가될 수도 있다. 그리고(또는) 프로세스가 에러 다이얼로그와 함께 즉시 종료될 수 있다.

    public static int wtf(String tag, Throwable tr)

    • tag는 null 이 될 수 있지만, tr 값은 null 로 설정할 수 없다.
    • 절대 발생하면 안될 예외 발생을 보고한다.
    • wtf(String, String) 와 비슷하나 로그에 대한 예외가 추가된 형식이다.

    public static int wtf(String tag, String msg, Throwable tr)

    • tag, msg, tr 모두 null로 설정 할 수 있다.
    • 절대 발생하면 안될 예외를 보고한다. wtf(String, Throwable) 와 비슷하나 메시지가 추가된 형식이다.
  • getStackTraceString

    • Throwable 인자값으로부터 로그 가능한 스택 트레이스를 얻을 수 있는 함수

    public static String getStackTraceString(Throwable tr)

    • Return 하는 String 값은 절대 null 이 아니다.
  • isLoggable

    • 지정된 태그의 로그가 지정된 level에서 로그 할 수 있는지 여부를 확인한다.

    • 모든 태그의 기본 레벨은 INFO 로 설정 되어있다. 즉 INFO를 포함하여 상위 레벨이 기록된다.

    • 로그 메서드를 호출하기 전에 태그를 로깅해야하는지 확인해야한다.

    • System property 를 설정하여 default level 을 바꿀 수 있다. (ADB 사용)

      #setprop log.tag.<YOUR_LOG_TAG>

    • : VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT 중 하나이다.
    • 또한 local.prop 파일을 생성할 수 있다.

    public static boolean isLoggable(String tag, int level)

    • tag : 확인해야할 태그, null 로 설정할 수 있다.
    • level : 확인할 레벨, ASSERT, ERROR, WARN, INFO, DEBUG, VERBOSE 가 들어간다.
    • 리턴값 : 로그가 가능한지 boolean 형으로 리턴한다.
    • IllegalArgumentException : Nougat(7.0) 릴리즈 (API<=23) 이전 버전에서 tag.length() > 23 인 경우 예외 발생, 24 이상 API 에서는 태그 제한이 없다.
  • println

    • 낮은 수준의 로깅 호출

    public static int println(int priority, String tag, String msg)

    • priority : 로그 메시지의 자료형 또는 우선순위 값이다. 보통 ASSERT, ERROR, WARN, INFO, DEBUG, VERBOSE 가 들어간다.

    • 리턴값 : int 형으로 쓰여진 바이트의 크기를 리턴한다.

출처 ( 참고자료 )

https://developer.android.com/reference/android/util/Log

https://m.blog.naver.com/PostView.nhn?blogId=eominsuk55&logNo=220229760263&proxyReferer=https%3A%2F%2Fwww.google.com%2F

http://labs.brandi.co.kr/2018/08/10/kimcy.html

  • 다음에 isLoggable 설정을 해보기 위한 ADB 가이드
반응형

'Android Developer' 카테고리의 다른 글

[Android] AsyncTask  (0) 2019.08.02
[Android] Task 와 Back Stack  (0) 2019.07.15
[Android] Activity의 LaunchMode  (0) 2019.07.10
[Android] 난독화(Proguard)  (0) 2019.05.14
[Android] OpenSource, ButterKnife, Firebase  (0) 2019.05.02