본문 바로가기

Android

안드로이드 앱에서 로그캣 로그를 얻어오기, 로그캣 로그 지우기

가끔, 크래쉬가 발생한 시점에 로그를 저장해야 할 경우가 있습니다.

이 시점에 로그를 얻어오려면, 아래와 같이 프로세스를 하나 띄워서 데이터를 얻어오면 됩니다.

Crash exception handler 같은 것으로 크래쉬 시점을 확인하여, 얻어온 로그캣 데이터를 저장하면 끝!

무작위 테스트하다가 죽었을 때, 좀 더 상세한 정황을 알 수 있겠죠?


private String getLogcatLog() {
    StringBuilder log = new StringBuilder();
    try {
        Process process = Runtime.getRuntime().exec("logcat -d -v time");
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

        String line = "";
        while ((line = bufferedReader.readLine()) != null) {
            log.append(line);
            log.append("\n");
        }
    } catch (IOException e) {

    }
    return log.toString();
}


참고로, 로그를 지우려면 아래와 같이 커맨드를 날리면 됩니다. 

private void clearLogcatLog() {
    try {
        @SuppressWarnings("unused")
        Process process = Runtime.getRuntime().exec("logcat -c");
    } catch (IOException e) {

    }
}


이걸 응용하면 특정 시점의 

- 프로세스를 얻어올 수 있습니다. (ps) 

- 액티비티 목록도 얻어올 수 있습니다.(dumpsys activity) 

단, 이렇게 덤프를 하려면 단말이 루팅되어 있어야 합니다. 

원래는 아래 권한을 앱이 가지고 있어야 하는데, 루팅되지 않은 앱은 아래 권한을 부여해 줘도 가지고 오지 못합니다.

<uses-permission android:name="android.permission.DUMP"/>