안드로이드 장치에서 로그 파일을 얻는 방법은 무엇입니까?


129

장치에서 내 PC로 로그 파일을 가져오고 싶습니다. 어떻게해야합니까?

답변:


112

Logcollector 는 좋은 옵션이지만 먼저 설치해야합니다.

로그 파일을 우편으로 보내려면 일반적으로 다음을 수행하십시오.


이 명령 줄이 작동하지 않습니다.이 출력을 얻습니다. logcat 읽기 : 잘못된 주장
neoneye

5
애플리케이션은 이제 자신의 로그 항목 만 읽을 수 있으므로 logcollector는 4.1 이상의 Android 버전에서는 작동하지 않습니다. ( groups.google.com/forum/#!topic/android-log-collector/… )
Matthew Lowe

11
어떤이없는 간단한 방법은, 그것은 설치할 필요없이, 외부 저장 장치로 USB를 통해 연결되면 단순히 장치에서 로그 파일을 풀 수있는 방법 ADB 처럼 또는 아무것도?
또는 매퍼

실행할 올바른 디렉토리에 있는지 확인하십시오 adb. 일반적으로C:\Users\[your username]\AppData\Local\Android\Sdk\platform-tools\
lolololol ol

30

이 코드가 누군가를 돕기를 바랍니다. 장치에서 로깅하는 방법을 파악하고 필터링하는 데 2 ​​일이 걸렸습니다.

public File extractLogToFileAndWeb(){
        //set a file
        Date datum = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.ITALY);
        String fullName = df.format(datum)+"appLog.log";
        File file = new File (Environment.getExternalStorageDirectory(), fullName);

        //clears a file
        if(file.exists()){
            file.delete();
        }


        //write log to file
        int pid = android.os.Process.myPid();
        try {
            String command = String.format("logcat -d -v threadtime *:*");        
            Process process = Runtime.getRuntime().exec(command);

            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            StringBuilder result = new StringBuilder();
            String currentLine = null;

            while ((currentLine = reader.readLine()) != null) {
                   if (currentLine != null && currentLine.contains(String.valueOf(pid))) {
                       result.append(currentLine);
                       result.append("\n");
                    }
            }

            FileWriter out = new FileWriter(file);
            out.write(result.toString());
            out.close();

            //Runtime.getRuntime().exec("logcat -d -v time -f "+file.getAbsolutePath());
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
        }


        //clear the log
        try {
            Runtime.getRuntime().exec("logcat -c");
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
        }

        return file;
    }

@mehdok가 지적한대로

로그 읽기 권한을 매니페스트에 추가

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

1
이것은 잘 작동하지만 필요한 모든 장치에서 작동합니다.<uses-permission android:name="android.permission.READ_LOGS" />
mehdok

27

나는 이런 종류의 것을 사용할 것입니다 :

$adb logcat -d > logcat.txt

-d 옵션은 전체 순환 버퍼를 텍스트 파일로 덤프하며 특정 조치 / 의도를 찾으려면 시도하십시오.

$adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt

도움이 되었기를 바랍니다 :)


13

USB 디버깅이나 사용에 관심이없는 사람들에게는 adb더 쉬운 해결책이 있습니다. Android 6 (이전 버전에 대해 잘 모르겠 음)에는 개발자 도구에 옵션이 있습니다 : 버그보고

이 옵션을 클릭하면 버그 리포트를 준비하고 드라이브에 저장하거나 이메일로 보내도록 요청합니다.

나는 이것이 로그를 얻는 가장 쉬운 방법이라는 것을 알았습니다. USB 디버깅을 켜고 싶지 않습니다.


1
정확히 내가 찾던 것!
YYamil

1
어디서 정확히 찾을 수 있습니까?
gurehbgui

11

편집하다:

내부 로그는 메모리의 순환 버퍼입니다. 라디오, 이벤트, 메인 각각에 대한 몇 가지 순환 버퍼가 실제로 있습니다. 기본값은 기본입니다.

버퍼의 복사본을 얻기 위해 한 가지 기술은 장치에서 명령을 실행하고 출력을 문자열 변수로 얻는 것입니다.

SendLog는 http://www.l6n.org/android/sendlog.shtml 을 수행하는 오픈 소스 앱입니다 .

핵심은 logcat임베디드 OS의 장치에서 실행 하는 것입니다. 들리는 것처럼 어렵지 않습니다. 링크에서 오픈 소스 앱을 확인하십시오.


이것은 출력을 화면에 덤프합니다. 파일에 필요합니다.
Pentium10

aLogCat을 사용하여 로그를 보낼 수 있습니다. 또는 단순히 DDMS에서 복사하여 붙여 넣기 : P
molnarm

@molnarm 나는 그것이 그가해야 할 모든 것이라면 내 대답이 약간 과장되었다고 인정한다. =)
Brad Hein

@BradHein SendLog는 오픈 소스이지만 소스 코드를 찾을 수없는 것 같습니다. 어디 있는지 알아?
smith324

8

종종 " logcat read: Invalid argument" 오류가 발생 합니다. 로그를 읽기 전에 로그를 지워야했습니다.

나는 이것을 좋아한다 :

prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt

감사! 오랫동안 그 오류가 발생했습니다 .logcat -c는 즉시 수정했습니다!
Jords

4

간단한 방법은 자체 로그 수집기 방법을 만들거나 시장에서 기존 로그 수집기 앱을 만드는 것입니다.

내 응용 프로그램의 경우 로그를 내 전자 메일로 보내거나 다른 곳으로 보내는 보고서 기능을 만들었습니다. 로그를 얻은 후에는 원하는대로 할 수 있습니다.

다음은 장치에서 로그 파일을 얻는 방법에 대한 간단한 예입니다.


3

간단히 다음 명령을 실행하여 출력을 터미널로 가져옵니다.

adb shell logcat

3

나는 그것이 오래된 질문이라는 것을 알고 있지만 2018 년에도 여전히 유효하다고 생각합니다.

모든 안드로이드 장치의 개발자 옵션 에 숨겨진 버그 보고서를 작성 하는 옵션이 있습니다 .

참고 : 이것은 전체 시스템 로그를 덤프합니다

개발자 옵션을 활성화하는 방법은 무엇입니까? 참조 : https://developer.android.com/studio/debug/dev-options

나를 위해 일하는 것 :

  1. 개발자가 분석 할 수있는 최소 가비지 로그를 만들려면 장치를 다시 시작하십시오.
  2. 버그를 재현
  3. 설정-> 개발자 옵션-> 버그 보고서로 이동하십시오.
  4. Android 시스템이 로그를 수집 할 때까지 기다립니다 (알림에서 진행률 표시 줄보기)
  5. 완료되면 알림을 탭하여 공유합니다 (gmail 또는 다른 방법을 사용할 수 있음)

이것을 읽는 방법? 열린 버그 보고서-1960년 1월 1일-HH-mm-ss.txt

아마도 다음과 같은 것을 찾고 싶을 것입니다.

------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of crash
06-13 14:37:36.542 19294 19294 E AndroidRuntime: FATAL EXCEPTION: main

또는:

------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of main

2

user1354692 덕분에 한 줄로 더 쉽게 만들 수있었습니다! 그가 언급 한 것 :

try {
    File file = new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()));
    Runtime.getRuntime().exec("logcat -d -v time -f " + file.getAbsolutePath());}catch (IOException e){}

이 코드를 넣는 가장 좋은 장소는 어디입니까? 안에 OnCreate?
영재

2

이메일로 로그를 검색하기 위해 작은 라이브러리 (.aar)를 만들었습니다. Gmail 계정으로 사용할 수 있습니다. 꽤 간단하지만 작동합니다. 여기 에서 사본 얻을 수 있습니다

이 사이트는 스페인어로되어 있지만 영어 버전의 제품 설명이있는 PDF가 있습니다.

도움이 되길 바랍니다.


2

두 단계 :

  • 로그 생성
  • 로그를 보내려면 Gmail을로드하십시오.

.

  1. 로그 생성

    File generateLog() {
        File logFolder = new File(Environment.getExternalStorageDirectory(), "MyFolder");
        if (!logFolder.exists()) {
            logFolder.mkdir();
        }
        String filename = "myapp_log_" + new Date().getTime() + ".log";
    
        File logFile = new File(logFolder, filename);
    
        try {
            String[] cmd = new String[] { "logcat", "-f", logFile.getAbsolutePath(), "-v", "time", "ActivityManager:W", "myapp:D" };
            Runtime.getRuntime().exec(cmd);
            Toaster.shortDebug("Log generated to: " + filename);
            return logFile;
        }
        catch (IOException ioEx) {
            ioEx.printStackTrace();
        }
    
        return null;
    }
  2. 로그를 보내려면 Gmail을로드하십시오.

    File logFile = generateLog();
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(logFile));
    intent.setType("multipart/");
    startActivity(intent);

# 1에 대한 참조

~~

# 2의 경우 로그 파일을로드하여보고 보내는 방법에 대한 여러 가지 답변이 있습니다. 마지막으로 여기의 해결책은 실제로 두 가지 모두에 효과적이었습니다.

  • 옵션으로 Gmail로드
  • 파일을 성공적으로 첨부

올바르게 작동 하는 https://stackoverflow.com/a/22367055/2162226 에게 감사드립니다.


0

먼저 PATH를 android sdk platform-tools로 설정하여 adb 명령이 실행 가능한지 확인하십시오.

export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH

그런 다음 다음을 실행하십시오.

adb shell logcat > log.txt

또는 먼저 adb platform-tools로 이동하십시오.

cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools 

그런 다음 실행

./adb shell logcat > log.txt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.