안드로이드가 Log이 잘 안 나오는 이유를 드디어 알았습니다.
2476 단어 안드로이드 시스템 데이터
Android 응용 개발 단계에서 우리는 시스템이 제공하는 로그 인쇄 기능을 사용하여 Logcat 컨트롤러에 데이터 정보를 선택적으로 인쇄하여 추적 응용이 실행되는 상태를 더욱 직관적으로 디버깅할 수 있다. 예를 들어 클라이언트와 서버가 통신하는 과정에서 관련된 URL 링크, Request 요청 파라미터와response 응답 결과 등이다.
그러나 인쇄된 메시지의 길이가 너무 길면, 예를 들어 인터페이스 응답 결과가 너무 크면, Logcat 컨트롤러 데이터가 완전하지 못하게 됩니다.Log을 사용한 이래로 이 문제를 자주 겪었습니다. 이전에도 별로 신경 쓰지 않았습니다. 메시지가 너무 긴 경우도 드물었기 때문에 가끔 이런 경우는 Debug 도구를 통해 디버깅을 추적하고 해당하는response 정보를 Bejson 등 다른 보조 도구에 복사해서 포맷해서 훑어보는 것이 다소 불편했습니다.
나중에 조회를 통해 안드로이드 시스템의 단일 로그 인쇄 길이는 유한하다는 것을 알게 되었다. 밑바닥 Logger 드라이버의 한 종류
Logger.h
헤더 파일에는 다음과 같은 두 줄의 코드가 있다.#define LOGGER_ENTRY_MAX_LEN (4*1024)
#define LOGGER_ENTRY_MAX_PAYLOAD \\
(LOGGER_ENTRY_MAX_LEN - sizeof(struct logger_entry))
시스템에서 단일 로그 정보를 표시하는 길이는 4*1024자 길이로 고정되어 있음을 알 수 있습니다!Logcat에서 사용하는 liblog 리소스 패키지에서도 Log로 인쇄된 메시지는 log 커널 드라이브에 의해 단축될 수 있습니다.
The message may have been truncated by the kernel log driver.
그중의 길이 제한을 이해하면 처리하기 쉽다.Message의 길이를 판단하여 로그 정보를 세그먼트로 출력할 수 있습니다. 예를 들어 다음과 같습니다.
if(xml.length() > 4000) {
for(int i=0;i4000){
if(i+4000"rescounter"+i,xml.substring(i, i+4000));
else
Log.i("rescounter"+i,xml.substring(i, xml.length()));
}
} else
Log.i("resinfo",xml);
}
참조 주소: