[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 |