2013-05-28 16 views
7

Po Where are Android logcat files stored? Dowiaduję się, że logcat jest zapisywany jako wewnętrzny bufor pierścieniowy w jądrze o rozmiarze 256 kb. Aplikacje używają specjalnego API, aby poprosić jądro o zapisywanie dzienników.W jaki sposób są zapisywane wiadomości logcat

Moje logi urządzeń są znacznie bardziej skomplikowane. Wiem to, ponieważ kiedy I adb logcat > adblogcat.txt otrzymuję naprawdę duży plik. Oznacza to, że "coś" usuwa bufory jądra i przechowuje je w systemie plików (?) I adb logcat czyta z tego większego pliku.

Czy ktoś może wyjaśnić, jak to działa? Patrzę w https://github.com/cgjones/android-system-core/blob/master/logcat/logcat.cpp i nie mogę zrozumieć dokładnych szczegółów.

Punkty bonusowe dla kogoś, kto wyjaśnia, co dzieje się przy ponownym uruchomieniu komputera, czy dziennik jest zapisywany między ponownymi uruchomieniami?

Odpowiedz

9

Oto moje rozumienie o LogCat, może są jakieś błędy, otwarci na wszelkie uwagi:

  1. O pliku dziennika w telefonie: Z frameworks/base/core/jni/android_util_Log.cpp widzimy wszystko dziennika zostanie zapisany w /dev/log/ domyślnie folder na Twoich urządzeniach. główne zostanie zapisane na /dev/log/main radio zostanie zapisane w /dev/log/radio ... , ponieważ wszystkie są plikami I/O systemu operatora. Dzięki temu nastąpi ponowne uruchomienie telefonu. Rozmiar tych plików ma pewne ograniczenia, jeśli rozmiar osiągnie ograniczenie, stary dziennik zostanie nadpisany.

  2. O Logcat: Logcat to narzędzie do odczytu lub ponownego wyprowadzania plików dziennika. Jest zainstalowany w folderze system/bin/w telefonie. Nie czytam każdego kodu logcat.cpp; ale mogę powiedzieć, że aplikacja logcat odczyta domyślnie plik dziennika w systemie/logcat/main i wypisze je na ekranie lub w pliku na podstawie parametrów, których używasz.

  3. O tym, jak dziennik jest generowany: Jeśli pojawi się kod źródłowy android.util.log można znaleźć wszystko log.d/log.e użyje metody JNI pisać dziennik, aby pliki dziennika, jak wspomniano powyżej.

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

    można znaleźć metody JNI here. Jeśli jesteś zainteresowany, możesz przeczytać kod źródłowy, aby dowiedzieć się, co tam robi.

  4. Zapisz logcat do konkretnego pliku chcesz: podstawie dziennika I/O, programista może napisać aplikację do zapisywania dziennika do pliku na karcie SD w telefonie, dzięki czemu możemy zachować więcej dzienników lub większy plik dziennika. Najprostszą metodą jest użycie Runtime.exec() do uruchomienia aplikacji logcat: Możesz monitorować odbiornik zakończony BOOT, aby uruchomić komendę logcat, aby przeczytać wszystkie logchery w swoich własnych plikach.

Na przykład:

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

Odnośnie 4, chciałbym to zrobić w init.rc, jako skrypt uruchomiony podczas startu. – elcuco

+0

Tak, myślę, że to zadziała. w ten sposób: 'service goldfish-logcat/system/bin/logcat >> yourfileonsdcard oneshot' to skrypt dla emulatora. – buptcoder

+0

@buptcoder Dzięki za świetny przegląd. Szukałem tego w dokumentacji Androida i nie mogłem go znaleźć! – Alan

Powiązane problemy