如何从Android设备获取日志文件?

我想从设备上的日志文件到我的电脑。 我怎样才能做到这一点?

Logcollector是一个不错的select,但你需要先安装它。

当我想要通过邮件发送日志文件时,我通常会执行以下操作:

  • 将设备连接到电脑。
  • 检查我已经安装我的操作系统的特定设备 。
  • 打开一个terminal
  • 运行adb shell logcat > log.txt

我希望这个代码能帮助别人。 花了我2天的时间才知道如何从设备login,然后过滤:

 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" /> 

我会使用这样的东西:

 $adb logcat -d > logcat.txt 

-d选项将整个循环缓冲区转储到文本文件中,如果您正在寻找特定的操作/意图尝试

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

希望这可以帮助 :)

编辑:

内部日志是内存中的循环缓冲区。 实际上有几个这样的循环缓冲区:无线电,事件,主要。 默认是主要的。

要获得一个缓冲区的副本,一种技术包括在设备上执行一个命令并获取输出为一个stringvariables。

SendLog是一个开源的应用程序,只是这样做: http ://www.l6n.org/android/sendlog.shtml

关键是在embedded式操作系统的设备上运行logcat 。 这不像听起来那么难,只要看看链接中的开源应用程序。

对于那些不感兴趣的USBdebugging或使用adb有一个更简单的解决scheme。 在Android 6(不知道以前的版本)有开发工具下的选项:采取错误报告

点击这个选项会准备一个错误报告,并提示你保存到驱动器或通过电子邮件发送。

我发现这是获取日志的最简单的方法。 我不喜欢打开USBdebugging。

通常我得到错误“ logcat read: Invalid argument ”。 在从日志中读取之前,我必须清除日志。

我喜欢这个:

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

一个简单的方法是制作你自己的日志收集器方法,甚至只是从市场上现有的日志收集器应用程序。

对于我的应用程序,我做了一个报告function,将日志发送到我的电子邮件(甚至到另一个地方 – 一旦你得到日志,你可以做,无论你想用它)。

以下是关于如何从设备获取日志文件的简单示例:

感谢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){} 

只需运行以下命令即可将输出发送到您的terminal:

 adb shell logcat 

我创build了一个小型库(.aar)通过电子邮件检索日志。 你可以使用它的Gmail帐户。 这很简单,但工作。 你可以从这里得到一份副本

该网站是西class牙文,但有一个英文版本的产品说明PDF。

我希望它可以帮助。

两个步骤:

  • 生成日志
  • 加载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 – 关于如何加载日志文件来查看和发送有很多不同的答案。 最后,这里的解决scheme实际上同时适用于:

  • 加载Gmail作为一个选项
  • 成功附加文件

非常感谢https://stackoverflow.com/a/22367055/2162226正确工作的答案;

首先确保adb命令是可执行的,通过设置PATH到android sdk platform-tools:

 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