2012-03-15 61 views
2

在一個Android應用程序,我試圖讓我的應用程序日誌消息,並將它們保存到文件 我使用下面的代碼。 我爲每個班級使用了不同的標籤,其中有幾個。 做的logcat -d給了我所有無關的消息.. 把我的包的名字一樣以編程方式爲我的應用程序過濾logcat。不爲我工作

的logcat -d myapp.com:I *:S

不起作用的結果是空的,但如果我這樣做

的logcat -d MYCLASS1TAG:我MYCLASS2TAG *:S

然後它的工作原理,但我有很多類..

如何我只是把我的包名和得到的結果??

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

    String line; 

    while ((line = bufferedReader.readLine()) != null) 
    { 


//  write to my file here 

    } 
    } catch (IOException e) { } 
+0

恐怕你必須列出你所有的標籤。或者您手動過濾完整日誌。 – zapl 2012-03-15 22:32:54

+0

在eclipse中,當你看到logcat時,在那裏有一個應用程序列,它顯示你的包名。這讓我相信這可能是可能的 – Ahmed 2012-03-15 22:36:40

+0

我想他們正在手動過濾日誌。至少http://developer.android.com/guide/developing/tools/adb.html#logcat只列出'tag:priority'和'*:priority' – zapl 2012-03-15 22:39:20

回答

5

我不知道如何從命令行執行此操作,但Eclipse的ADT插件允許您按應用程序進行過濾。

編輯:我很好奇,所以我翻閱了ADT的資料來看看ADT是怎麼做到的。它的長短之處在於它使用-v long選項將PID包含在每條消息中,並且它將映射從PID保存到應用程序名稱。相關源代碼文件位於軟件包com.android.ddmuilib.logcat.LogCatMessageParsercom.android.ddmuilib.logcat.LogCatPidToNameMapper中。

所以,一個解決辦法,我能想到的是調用一個shell(adb shell),使用ps找出你的PID,然後通過管道亞行logcat的輸出到grep:

adb logcat -v long | grep <your PID> 

這將是有點痛苦,因爲你的PID每次運行應用程序時都會改變,但這就是你可以輕鬆地做到的。

編輯:我只是注意到,長格式實際上打​​印PID在一行和消息在下一行,所以你可能需要使用awk而不是grep。我會測試一些東西併發布後續內容。

+0

感謝您的努力布賴恩:) – Ahmed 2012-03-16 00:04:04

0

因此,據我瞭解,你正試圖在設備上運行logcat來抓取並保存到文件。不幸的是,在當前的命令行中,filterspec僅支持tag:priority格式。您將需要通過線路過濾器通過自己的線路運行輸出。你可以通過計算你的PID然後根據它來過濾行來實現自動化。

相關問題