2012-02-15 13 views
0

プログラムでlogcatをフィルタでダンプする必要があります。私はadb logcat -s "TAGNAME"を適用しましたが、アプリはちょうど "ハングしました"。同様のスレッドがありますが、何の解決策があります:Read filtered log cat(Programmatically)?logcatフィルタをプログラムで適用する

 try { 
      Process process = Runtime.getRuntime().exec("logcat -s XXX"); 
      BufferedReader bufferedReader = new BufferedReader(
        new InputStreamReader(process.getInputStream())); 

      StringBuilder log = new StringBuilder(); 
      String line; 
      while ((line = bufferedReader.readLine()) != null) { 
       log.append(line); 
       log.append(FragmentLog.LINE_SEPARATOR); 
      } 

      ((TextView) tv).setText(log.toString()); 

     } catch (IOException e) { 
      ((TextView) tv).setText(R.string.default_blank); 
     } 

答えて

3

私は別の方法で私のアプリの仕事をしています。誰かが知りたいと思うように、ここにコードがあります。

try {    
     Process process = Runtime.getRuntime().exec("logcat -d"); 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 

     String line; 

     Pattern pattern = Pattern.compile("XXX", 0); 

     while ((line = bufferedReader.readLine()) != null) { 
      if (patternu != null 
        && !pattern.matcher(line).find()) { 
       continue; 
      } 
      log.append(line); 
      log.append('\n'); 
     } 

    } catch (IOException e) { 

    } 
+0

patternuはスペルミスのある変数だと思います。 – gonzobrains

+0

bufferedReader.readLine()が実行されると、常にnullになります。 – gonzobrains

+0

は期待どおりに機能します。 –

2

さて、最初にこのコマンドをオフにlogcatをストリーミングしていないし、それをダンプしません。したがって、決して走りを止めることはありません。また、報告するコンテンツがない場合、BufferedReaderがおそらくフルラインが来るのを待っているので、ブロックしています。

+0

素晴らしいです。まあ、私はlogcatのいくつかのメッセージをフィルタリングし、それをダンプする必要があります。 – ys126

関連する問題