将android logcat数据写入文件


Answers:


124

这是读取日志的示例

您可以将其更改为写入文件而不是TextView

需要获得许可AndroidManifest

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

码:

public class LogTest extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    try {
      Process process = Runtime.getRuntime().exec("logcat -d");
      BufferedReader bufferedReader = new BufferedReader(
      new InputStreamReader(process.getInputStream()));

      StringBuilder log = new StringBuilder();
      String line;
      while ((line = bufferedReader.readLine()) != null) {
        log.append(line);
      }
      TextView tv = (TextView) findViewById(R.id.textView1);
      tv.setText(log.toString());
    } catch (IOException e) {
    }
  }
}

2
@ jkhouw1 ... +60我见过的最好的答案,也是发布答案的好方法,(我也向你学习)即使链接失效,这个答案也总是有用的,我只需要添加Scroll View而已我想要的,因为您的回答,干杯!
swiftBoy 2012年

很好。但是有没有一种方法可以根据标签过滤这些日志?
AbhishekB 2012年

1
我尚未对此进行测试,但我认为您会将其更改为“ logcat -d -s YourTagToFilterOn”
jkhouw1 2012年

我们如何放置包名称过滤器。
kamal_tech_view 2014年

4
此权限已在Android 4.3中删除,因此应用程序无法再使用其权限。此外,许多设备都将其向前推进了一步,并且没有任何输出。我没有列表,因为我经常看到它。
汤姆(Tom)

39

Logcat可以直接写入文件:

public static void saveLogcatToFile(Context context) {    
    String fileName = "logcat_"+System.currentTimeMillis()+".txt";
    File outputFile = new File(context.getExternalCacheDir(),fileName);
    @SuppressWarnings("unused")
    Process process = Runtime.getRuntime().exec("logcat -f "+outputFile.getAbsolutePath());
}

关于logcat的更多信息:请参见http://developer.android.com/tools/debugging/debugging-log.html


1
由于logcat -f不会自动退出,因此该命令似乎停止运行。有什么方法可以将日志写入文件并自动退出类似于logcat -d的进程?
菲利普(Phillip)2014年

尝试将&放在背景的最后。
ShihabSoft

5
logcat -df <文件名>将所有日志下沉到<文件名>并立即退出。
亚历山大·斯科沃佐夫

最初使用这种方法之后,我转而使用缓冲的读写器,因为-f不能很好地处理文件名中的空格。
LordParsley16年

是的,应该是-df。另请注意:此代码将其转储到外部缓存目录中
Atul

1

或者您可以尝试此变体

try {
    final File path = new File(
            Environment.getExternalStorageDirectory(), "DBO_logs5");
    if (!path.exists()) {
        path.mkdir();
    }
    Runtime.getRuntime().exec(
            "logcat  -d -f " + path + File.separator
                    + "dbo_logcat"
                    + ".txt");
} catch (IOException e) {
    e.printStackTrace();
}

0
public static void writeLogToFile(Context context) {    
    String fileName = "logcat.txt";
    File file= new File(context.getExternalCacheDir(),fileName);
    if(!file.exists())
         file.createNewFile();
    String command = "logcat -f "+file.getAbsolutePath();
    Runtime.getRuntime().exec(command);
}

上面的方法会将所有日志写入文件。另外,请在清单文件中添加以下权限

<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.