Android
로깅 및 사용
수색…
통사론
-
Log.v(String tag, String msg, Throwable tr)
-
Log.v(String tag, String msg)
-
Log.d(String tag, String msg, Throwable tr)
-
Log.d(String tag, String msg)
-
Log.i(String tag, String msg, Throwable tr)
-
Log.i(String tag, String msg)
-
Log.w(String tag, String msg, Throwable tr)
-
Log.w(String tag, String msg)
-
Log.e(String tag, String msg, Throwable tr)
-
Log.e(String tag, String msg)
매개 변수
선택권 | 기술 |
---|---|
-b (버퍼) | 이벤트 또는 라디오와 같이 볼 수있는 대체 로그 버퍼를로드합니다. 기본 버퍼가 기본적으로 사용됩니다. 대체 로그 버퍼보기를 참조하십시오. |
-기음 | 전체 로그를 지우고 (플러시) 종료합니다. |
-디 | 로그를 화면에 덤프하고 종료합니다. |
-f (파일 이름) | 로그 메시지 출력을 (filename)에 기록합니다. 기본값은 stdout입니다. |
-지 | 지정된 로그 버퍼의 크기를 인쇄하고 종료합니다. |
-n (카운트) | 회전 된 최대 로그 수를 (개수)로 설정합니다. 기본값은 4입니다. -r 옵션이 필요합니다. |
-r (kbytes) | 로그 파일을 출력 (kbytes)마다 회전시킵니다. 기본값은 16입니다. -f 옵션이 필요합니다. |
-에스 | 기본 필터 사양을 자동으로 설정합니다. |
-v (형식) | 로그 메시지의 출력 형식을 설정합니다. 기본값은 간단한 형식입니다. |
비고
정의
Logcat은 장치에서 오류가 발생했을 때의 스택 추적과 로그 클래스로 앱에서 작성한 메시지를 포함하여 시스템 메시지의 로그를 덤프하는 명령 줄 도구입니다.
언제 사용 하는가?
Android의 Log 메소드 중 하나를 사용하는 대신 콘솔에 인쇄하기 위해 Java의 System.out 메소드를 사용하려는 경우 기본적으로 동일하게 작동한다는 것을 알아야합니다. 그러나 Android의 Log 메소드가 제공하는 추가 정보와 형식이 더 유용하기 때문에 Java의 메소드 사용을 피하는 것이 좋습니다. 또한 System.out 인쇄 메서드는 Log.i()
메서드로 리디렉션 됩니다.
유용한 링크
- 로그 및 logcat에 대한 안드로이드 개발자 공식 문서.
- Stackoveflow 질문 : 안드로이드 Log.v (), Log.d (), Log.i (), Log.w (), Log.e () - 각각을 사용할 때?
logcat 출력 필터링
관심이없는 메시지가 많기 때문에 logcat 출력을 필터링하는 것이 좋습니다. 출력을 필터링하려면 "Android Monitor"를 열고 오른쪽 상단의 드롭 다운을 클릭하고 필터 구성 편집을 선택 하십시오.
이제 사용자 정의 필터를 추가하여 관심있는 메시지를 표시하고 무시할 수있는 잘 알려진 로그 행을 필터링 할 수 있습니다. 출력의 일부를 무시하기 위해 정규식을 정의 할 수 있습니다. 일치하는 태그를 제외하는 예는 다음과 같습니다.
^(?!(HideMe|AndThis))
이 예제를 입력하면 다음과 같이 입력 할 수 있습니다.
위는 입력을 제외하는 정규식입니다. 블랙리스트 에 다른 태그를 추가하려면 파이프 뒤에 추가하십시오 |
캐릭터. 예를 들어 'GC'를 차단하려면 다음과 같은 필터를 사용합니다.
^(?!(HideMe|AndThis|GC))
더 많은 문서와 예제는 Logging 방문 및 Logcat 방문을 참조하십시오.
벌채 반출
어떤 고품질의 Android 애플리케이션도 애플리케이션 로그를 통해 수행중인 작업을 추적합니다. 이 로그를 통해 개발자는 응용 프로그램의 상태를 쉽게 진단 할 수 있습니다. 전체 Android 설명서는 여기 에서 볼 수 있지만 요약은 다음과 같습니다.
기본 로깅
Log
클래스는 tag
와 message
지정하여 개발자 로그를 작성하는 주요 소스입니다. 이 태그는 특정 활동의 행을 식별하기 위해 로그 메시지를 필터링하는 데 사용할 수있는 태그입니다. 간단하게 전화하십시오. Log.v(String tag, String msg);
그리고 안드로이드 시스템은 logcat에 메시지를 쓸 것입니다 :
07-28 12:00:00.759 24812-24839/my.packagename V/MyAnimator: Some log messages
└ time stamp | app.package┘ | └ any tag |
process & thread ids ┘ log level┘ └ the log message
팁:
프로세스 ID와 스레드 ID를 확인하십시오. 동일하다면 - 로그는 메인 / UI 스레드에서옵니다!
모든 태그를 사용할 수 있지만 클래스 이름을 태그로 사용하는 것이 일반적입니다.
public static final String tag = MyAnimator.class.getSimpleName();
로그 수준
Android logger에는 6 가지 수준이 있습니다. 각 수준은 특정 목적을 충족합니다.-
ERROR
:Log.e()
- 치명적인 오류를 나타 내기 위해 사용되며,
Exception
throw 할 때 인쇄되는 수준입니다.
- 치명적인 오류를 나타 내기 위해 사용되며,
-
WARN
:Log.w()
- 주로 복구 가능한 오류에 대한 경고 표시에 사용됩니다.
-
INFO
:Log.i()
- 응용 프로그램 상태에 대한 상위 수준의 정보를 나타내는 데 사용됩니다.
-
DEBUG
:Log.d()
- 응용 프로그램을 디버깅 할 때 알아두면 유용 할 수 있지만 응용 프로그램을 실행할 때 방해가되는 정보를 기록하는 데 사용됩니다.
-
VERBOSE
:Log.v()
- 응용 프로그램 상태에 대한 세부 정보를 반영하는 정보를 기록하는 데 사용됩니다.
-
ASSERT
:Log.wtf()
- 발생하지 않아야하는 상태에 대한 정보를 기록하는 데 사용됩니다.
- wtf 는 "끔찍한 실패"를 의미합니다.
로깅을위한 동기 부여
로깅의 동기는 응용 프로그램의 이벤트 체인을 보면서 오류, 경고 및 기타 정보를 쉽게 찾을 수 있습니다. 예를 들어, 텍스트 파일에서 행을 읽지 만 파일이 결코 비어 있지 않다고 잘못 가정하는 응용 프로그램을 상상해보십시오. 로깅되지 않는 앱의 로그 추적은 다음과 같습니다.E/MyApplication: Process: com.example.myapplication, PID: 25788
com.example.SomeRandomException: Expected string, got 'null' instead
디버거를 사용하여 단계별로 문제가 발생할 수있는 불법 라인으로 연결되는 일련의 스택 추적이 뒤 따른다.
그러나 로깅이 활성화 된 응용 프로그램의 로그 추적은 다음과 같습니다.
V/MyApplication: Looking for file myFile.txt on the SD card
D/MyApplication: Found file myFile.txt at path <path>
V/MyApplication: Opening file myFile.txt
D/MyApplication: Finished reading myFile.txt, found 0 lines
V/MyApplication: Closing file myFile.txt
...
E/MyApplication: Process: com.example.myapplication, PID: 25788
com.example.SomeRandomException: Expected string, got 'null' instead
로그를 한눈에 볼 수 있으며 파일이 비어 있음이 분명합니다.
로깅 할 때 고려할 사항 :
로깅은 Android 개발자가 응용 프로그램의 내부 작업에 대한 더 많은 정보를 얻을 수있는 강력한 도구이지만 로깅에는 몇 가지 단점이 있습니다.로그 가독성 :
Android 애플리케이션에서 여러 로그가 동 기적으로 실행되는 것은 일반적입니다. 따라서 각 로그는 쉽게 읽을 수 있고 관련성 있고 필요한 정보 만 포함하는 것이 매우 중요합니다.공연:
로깅에는 적은 양의 시스템 자원이 필요합니다. 일반적으로이 방법은 과도하게 사용하면 로깅이 응용 프로그램 성능에 부정적인 영향을 미칠 수 있으므로 걱정하지 않아도됩니다.보안:
최근 Google Play 마켓 플레이스에 여러 Android 애플리케이션이 추가되어 사용자가 실행중인 모든 애플리케이션의 로그를 볼 수 있습니다. 이러한 의도하지 않은 데이터 표시로 인해 사용자는 기밀 정보를 볼 수 있습니다. 일반적으로 응용 프로그램을 마켓 플레이스에 게시 하기 전에 비공개 데이터에 포함 된 로그를 제거하십시오.결론:
로깅은 개발자에게 제공하는 힘 때문에 안드로이드 애플리케이션의 핵심 부분입니다. 유용한 로그 추적을 만드는 기능은 소프트웨어 개발에서 가장 어려운 부분 중 하나이지만 Android의 Log 클래스를 사용하면 훨씬 쉽게 작업 할 수 있습니다.더 많은 문서와 예제는 Logging 방문 및 Logcat 방문을 참조하십시오.
Logcat에서 소스에 대한 링크로 직접 기록
이것은 코드에 링크를 추가하는 좋은 트릭이므로 로그를 발행 한 코드로 쉽게 건너 뛸 수 있습니다.
다음 코드를 사용하여이 호출 :
MyLogger.logWithLink("MyTag","param="+param);
결과는 다음과 같습니다.
07-26...012/com.myapp D/MyTag: MyFrag:onStart(param=3) (MyFrag.java:2366) // << logcat converts this to a link to source!
이것은 MyLogger라는 클래스 내부의 코드입니다.
static StringBuilder sb0 = new StringBuilder(); // reusable string object
public static void logWithLink(String TAG, Object param) {
StackTraceElement stack = Thread.currentThread().getStackTrace()[3];
sb0.setLength(0);
String c = stack.getFileName().substring(0, stack.getFileName().length() - 5); // removes the ".java"
sb0.append(c).append(":");
sb0.append(stack.getMethodName()).append('(');
if (param != null) {
sb0.append(param);
}
sb0.append(") ");
sb0.append(" (").append(stack.getFileName()).append(':').append(stack.getLineNumber()).append(')');
Log.d(TAG, sb0.toString());
}
이것은 기본적인 예이며, 호출자에게 링크를 발행하도록 쉽게 확장 될 수 있습니다 (힌트 : 스택은 [3] 대신 [4]가 될 것입니다). 그리고 다른 관련 정보도 추가 할 수 있습니다.
로그캣 사용
Logcat은 장치에서 오류가 발생했을 때의 스택 추적과 로그 클래스로 앱에서 작성한 메시지를 포함하여 시스템 메시지의 로그를 덤프하는 명령 줄 도구입니다.
Logcat 출력은 Android Studio의 Android 모니터 또는 adb 명령 줄에 표시 될 수 있습니다.
Android Studio
'Android Monitor'아이콘을 클릭하여 표시 : 또는 Windows / Linux에서 Alt + 6 을 누르거나 Mac에서 CMD + 6 을 누르십시오.
명령 줄을 통해 :
간단한 사용법 :
$ adb logcat
타임 스탬프 사용 :
$ adb logcat -v time
특정 텍스트 필터링 :
$ adb logcat -v time | grep 'searchtext'
커맨드 라인 logcat 에는 많은 옵션과 필터가 있으며 여기 에 문서화되어 있습니다 .
간단하지만 유용한 예제는 모든 태그에 우선 순위가 "error"인 모든 로그 메시지를 표시하는 다음 필터 표현식입니다.
$ adb logcat *:E
로깅 코드 생성
Android Studio
의 Live templates
은 빠른 로깅을위한 몇 가지 바로 가기를 제공 할 수 있습니다.
라이브 템플릿을 사용하려면 템플릿 이름을 입력하고 TAB
누르거나 입력하여 문을 삽입하면됩니다.
예 :
-
logi
→ →android.util.Log.i(TAG, "$METHOD_NAME$: $content$");
-
$METHOD_NAME$
이 (가) 메소드 이름으로 자동 대체되며 커서는 내용이 채워지$METHOD_NAME$
기다립니다.
-
-
loge
→ 동일, 오류 - 로깅 수준의 나머지 기간 동안.
전체 템플릿 목록은 Android Studio
의 설정에서 찾을 수 있습니다 ( ALT + s 및 유형 "live"). 또한 맞춤 템플릿을 추가 할 수도 있습니다.
Android Studio
의 Live templates
이 당신의 필요에 충분하지 않다는 것을 안다면 안드로이드 포스트 픽스 플러그인
이것은 로깅 라인을 수동으로 작성하는 것을 피하는 데 도움이되는 매우 유용한 라이브러리입니다.
구문은 절대적으로 간단합니다.
.log - 로깅. 상수 변수 "TAG"가 있으면 "TAG"를 사용합니다. 다른 클래스 이름을 사용합니다.
Android Studio 사용
로그 지우기
전체 로그를 정리 (플러시)하려면 다음을 수행하십시오.
adb logcat -c