2012-03-15 3 views
2

안드로이드 애플 리케이션에서 내 응용 프로그램 로그 메시지를 가져 와서 파일에 저장하려고합니다. 아래 코드를 사용하고 있습니다. 각 클래스마다 다른 TAG를 사용하고 있으며 그 중 몇 개가 있습니다. 하고 로그 캣의 -d는프로그래밍 방식으로 내 애플리케이션의 logcat을 필터링합니다. 나를 위해 일하지 않습니다

로그 캣처럼 내 패키지 이름을 넣어 .. 나에게 모든 관련이없는 메시지를 제공 -d myapp.com:I * : 결과가 비어 있지만 작동하지 않습니다 S

나는

을 할 경우

로그 캣 -d MYCLASS1TAG :

어떻게 그냥 내 패키지 이름을 넣고 결과를 얻을 수 있습니다 .. 작동 후 S

을하지만, 나는 많은 수업을 .. ?? : 나는 * MYCLASS2TAG

try {  
     Process process = Runtime.getRuntime().exec("logcat -d"); 
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 

    String line; 

    while ((line = bufferedReader.readLine()) != null) 
    { 


//  write to my file here 

    } 
    } catch (IOException e) { } 
+0

모든 태그를 나열해야합니다. 또는 전체 로그를 수동으로 필터링합니다. – zapl

+0

이클립스에서 logcat을 볼 때 응용 프로그램 열에 패키지 이름이 표시됩니다. 그게 가능할 수도 있다고 믿게합니다 – Ahmed

+0

나는 그들이 로그를 수동으로 필터링하고 있다고 생각합니다. 최소한 http://developer.android.com/guide/developing/tools/adb.html#logcat은'tag : priority'와'* : priority' 만 나열합니다. – zapl

답변

5

명령 줄에서 수행하는 방법을 잘 모르겠지만 Eclipse 용 ADT 플러그인을 사용하면 응용 프로그램별로 필터링 할 수 있습니다.

편집 : 궁금해서 ADT 소스를 통해 ADT의 작동 방식을 확인했습니다. 길고 짧은 것은 각 메시지에 PID를 포함시키기 위해 -v long 옵션을 사용하고, PID에서 앱 이름으로 Map을 유지한다는 것입니다. 관련 소스 코드 파일은 com.android.ddmuilib.logcat.LogCatMessageParsercom.android.ddmuilib.logcat.LogCatPidToNameMapper 패키지에 있습니다.

adb logcat -v long | grep <your PID> 

그것은 될 것입니다 :

그래서, 내가 생각할 수있는 하나의 해결 방법은, 쉘 (adb shell)를 호출 ps를 사용하여 PID를 파악하고 파이프 ADB 로그 캣의 출력은 grep을하는 것입니다 PID는 앱을 실행할 때마다 바뀌기 때문에 약간의 고통이 있습니다.하지만 그렇게하면 문제가 될 수 있습니다.

편집 : 나는 긴 포맷이 실제로 한 행의 PID와 다음 행의 메시지를 인쇄하므로 grep 대신 awk와 같은 것을 사용해야 할 수도 있습니다. 몇 가지 사항을 테스트하고 후속 조치를 올립니다.

+0

노력 브라이언 감사합니다 :) – Ahmed

0

그래서 당신이 그것을 잡아 파일에 저장 장치에 logcat을 실행하려고 이해합니다. 아쉽게도 현재 명령 행에서 filterspec은 tag:priority 형식 만 지원합니다. 자체 출력 필터를 사용하여 출력을 실행해야합니다. PID를 알아 낸 다음이를 기반으로 라인을 필터링함으로써이를 자동화 할 수 있습니다.

관련 문제