如何从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发送日志
。
-
生成日志
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; }
-
加载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作为一个选项
- 成功附加文件
首先确保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