2013-05-28 97 views
7

以下Where are Android logcat files stored?我知道logcat被保存爲內核中的內部環形緩衝區,其大小爲256kb。應用程序使用特殊的API來要求內核保存日誌。如何logcat消息保存

我的設備日誌比較大。我知道這是因爲當我adb logcat > adblogcat.txt我得到一個非常大的文件。這意味着「某事」清除了內核緩衝區並將它們存儲在文件系統(?)中,並從這個較大的文件中讀取。

任何人都可以解釋這是如何工作的?我正在調查https://github.com/cgjones/android-system-core/blob/master/logcat/logcat.cpp,我無法理解確切的細節。

加分指向解釋重新啓動時會發生什麼的人,是在重新啓動之間保存的日誌?

回答

9

這是我對logcat的理解,也許有一些錯誤,歡迎任何意見:

  1. 關於在手機中的日誌文件: 從frameworks/base/core/jni/android_util_Log.cpp 我們可以看到所有的日誌將被寫入/dev/log/默認情況下設備中的文件夾。 主要寫入/dev/log/main 無線電將被寫入/dev/log/radio ... 因爲都是操作系統的I/O文件。所以當手機重新啓動時會被清除。這些文件大小有一定的限制,如果大小達到限制,舊的日誌將被覆蓋。

  2. 關於Logcat: Logcat是一個讀取或重新輸出日誌文件的工具。它安裝在手機的系統/ bin /文件夾中。我不讀logcat.cpp的每一個代碼;但我可以說logcat應用程序將默認讀取system/logcat/main中的日誌文件,並根據您使用的參數在屏幕或文件中輸出它們。

  3. 的是如何生成的日誌: 如果你看到的android.util.log的源代碼,你可以找到所有log.d/log.e將使用JNI方法寫入日誌文件的日誌,如上所述。

    public static native int println_native(int bufID,int priority, String tag, String msg);

    您可以找到JNI方法here。如果你對它感興趣,你可以閱讀源代碼來找到它在那裏做什麼。

  4. 將logcat保存到您想要的特定文件: 基於Log I/O,開發人員可以編寫應用程序將日誌保存到手機SD卡中的文件中,以便我們可以保留更多日誌或更大的日誌文件。 最簡單的方法是使用Runtime.exec()來執行logcat應用程序: 您可以監視BOOT完成的接收器以啓動logcat命令,將所有logcat的日誌讀取到您自己的文件中。

例如:

String cmd = "logcat -v time -f yourown.file" 
Process process = Runtime.getRuntime().exec(cmd); 
+1

關於4,我會做這init.rc,作爲一個腳本在啓動系統。 – elcuco

+0

是的,我想它可以工作。像這樣:'service goldfish-logcat/system/bin/logcat >> yourfileonsdcard oneshot'它是一個模擬器的腳本。 – buptcoder

+0

@buptcoder感謝您的好評。我一直在Android文檔中查找,並找不到它! – Alan