Android
Logowanie i korzystanie z Logcat
Szukaj…
Składnia
-
Log.v(String tag, String msg, Throwable tr)
-
Log.v(String tag, String msg)
-
Log.d(String tag, String msg, Throwable tr)
-
Log.d(String tag, String msg)
-
Log.i(String tag, String msg, Throwable tr)
-
Log.i(String tag, String msg)
-
Log.w(String tag, String msg, Throwable tr)
-
Log.w(String tag, String msg)
-
Log.e(String tag, String msg, Throwable tr)
-
Log.e(String tag, String msg)
Parametry
Opcja | Opis |
---|---|
-b (bufor) | Ładuje alternatywny bufor dziennika do przeglądania, taki jak zdarzenia lub radio. Główny bufor jest używany domyślnie. Zobacz Wyświetlanie alternatywnych buforów dziennika. |
-do | Czyści (opróżnia) cały dziennik i wychodzi. |
-re | Zrzuca dziennik na ekran i wychodzi. |
-f (nazwa pliku) | Zapisuje wyjście komunikatu dziennika do (nazwa pliku). Domyślnie jest to standardowe wyjście. |
-sol | Drukuje rozmiar określonego buforu dziennika i kończy działanie. |
-n (licz) | Ustawia maksymalną liczbę obróconych dzienników na (zliczanie). Wartość domyślna to 4. Wymaga opcji -r. |
-r (kilobajty) | Obraca plik dziennika co (kilobajty) danych wyjściowych. Wartość domyślna to 16. Wymaga opcji -f. |
-s | Ustawia domyślną specyfikację filtra na cichą. |
-v (format) | Ustawia format wyjściowy komunikatów dziennika. Domyślnie jest to krótki format. |
Uwagi
Definicja
Logcat to narzędzie wiersza polecenia, które zrzuca dziennik komunikatów systemowych, w tym ślady stosu, gdy urządzenie generuje błąd i komunikaty napisane z aplikacji za pomocą klasy Log .
Kiedy użyć
Jeśli rozważasz użycie metod System.out w Javie do drukowania na konsoli zamiast jednej z metod dziennika systemu Android, powinieneś wiedzieć, że w zasadzie działają one tak samo. Lepiej jednak unikać metod Java, ponieważ dodatkowe informacje i formatowanie zapewniane przez metody dziennika Androida są bardziej korzystne. Ponadto metody drukowania System.out są przekierowywane do metody Log.i()
.
Przydatne linki
- Oficjalna dokumentacja programisty Androida dla Log i logcat .
- Pytanie Stackoveflow : Android Log.v (), Log.d (), Log.i (), Log.w (), Log.e () - Kiedy używać każdego z nich?
Filtrowanie danych wyjściowych logcat
Pomocne jest filtrowanie danych wyjściowych logcat, ponieważ istnieje wiele komunikatów, które nie są interesujące. Aby przefiltrować dane wyjściowe, otwórz „Monitor Android” i kliknij menu rozwijane w prawym górnym rogu i wybierz Edytuj konfigurację filtra
Teraz możesz dodać niestandardowe filtry, aby wyświetlać interesujące wiadomości, a także odfiltrować znane wiersze dziennika, które można bezpiecznie zignorować. Aby zignorować część wyniku, możesz zdefiniować wyrażenie regularne . Oto przykład wykluczenia pasujących tagów:
^(?!(HideMe|AndThis))
Można to wprowadzić, postępując zgodnie z tym przykładem:
Powyższe jest wyrażeniem regularnym, które wyklucza dane wejściowe. Jeśli chcesz dodać kolejny tag do czarnej listy , dodaj go po potoku |
postać. Na przykład, jeśli chcesz umieścić na czarnej liście „GC”, użyj takiego filtra:
^(?!(HideMe|AndThis|GC))
Aby uzyskać więcej dokumentacji i przykładów, zobacz Logowanie i korzystanie z Logcat
Logowanie
Każda wysokiej jakości aplikacja na Androida będzie śledzić to, co robi za pośrednictwem dzienników aplikacji. Te dzienniki umożliwiają programistom łatwą debugowanie w celu zdiagnozowania, co dzieje się z aplikacją. Pełną dokumentację na Androida można znaleźć tutaj , ale podsumowanie jest następujące:
Podstawowe logowanie
KlasaLog
jest głównym źródłem pisania dzienników programistów poprzez określenie tag
i message
. Tag służy do filtrowania wiadomości w dzienniku w celu określenia, które wiersze pochodzą z konkretnej aktywności. Po prostu zadzwoń Log.v(String tag, String msg);
System Android napisze wiadomość do logcat:
07-28 12:00:00.759 24812-24839/my.packagename V/MyAnimator: Some log messages
└ time stamp | app.package┘ | └ any tag |
process & thread ids ┘ log level┘ └ the log message
WSKAZÓWKA:
Zwróć uwagę na identyfikator procesu i identyfikator wątku. Jeśli są takie same - dziennik pochodzi z wątku głównego / interfejsu użytkownika!
Można użyć dowolnego znacznika, ale często używa się nazwy klasy jako znacznika:
public static final String tag = MyAnimator.class.getSimpleName();
Poziomy dziennika
Rejestrator Androida ma 6 różnych poziomów, z których każdy służy do określonego celu:-
ERROR
:Log.e()
- Służy do wskazywania krytycznej awarii, jest to poziom wydrukowany podczas zgłaszania
Exception
.
- Służy do wskazywania krytycznej awarii, jest to poziom wydrukowany podczas zgłaszania
-
WARN
:Log.w()
- Służy do wskazywania ostrzeżenia, głównie w przypadku awarii możliwych do odzyskania
-
INFO
:Log.i()
- Służy do wskazywania informacji wyższego poziomu o stanie aplikacji
-
DEBUG
:Log.d()
- Służy do rejestrowania informacji, które byłyby przydatne podczas debugowania aplikacji, ale utrudniałyby uruchomienie aplikacji
-
VERBOSE
:Log.v()
- Służy do rejestrowania informacji odzwierciedlających drobne szczegóły dotyczące stanu aplikacji
-
ASSERT
:Log.wtf()
- Służy do rejestrowania informacji o stanie, który nigdy nie powinien się zdarzyć.
- wtf oznacza „What a Terrible Failure”.
Motywacja do rejestrowania
Motywacją do rejestrowania jest łatwe znajdowanie błędów, ostrzeżeń i innych informacji poprzez przeglądanie łańcucha zdarzeń z aplikacji. Na przykład wyobraź sobie aplikację, która odczytuje wiersze z pliku tekstowego, ale niepoprawnie zakłada, że plik nigdy nie będzie pusty. Śledzenie dziennika (aplikacji, która się nie rejestruje) wyglądałoby mniej więcej tak:E/MyApplication: Process: com.example.myapplication, PID: 25788
com.example.SomeRandomException: Expected string, got 'null' instead
Po nich następuje szereg śladów stosu, które ostatecznie doprowadziłyby do linii obrażeń, gdzie przejście przez debugger ostatecznie doprowadziłoby do problemu
Jednak dziennik śledzenia aplikacji z włączonym rejestrowaniem może wyglądać mniej więcej tak:
V/MyApplication: Looking for file myFile.txt on the SD card
D/MyApplication: Found file myFile.txt at path <path>
V/MyApplication: Opening file myFile.txt
D/MyApplication: Finished reading myFile.txt, found 0 lines
V/MyApplication: Closing file myFile.txt
...
E/MyApplication: Process: com.example.myapplication, PID: 25788
com.example.SomeRandomException: Expected string, got 'null' instead
Rzut oka na dzienniki i oczywiste jest, że plik był pusty.
Co należy wziąć pod uwagę podczas logowania:
Chociaż rejestrowanie jest potężnym narzędziem, które pozwala programistom Androida uzyskać lepszy wgląd w wewnętrzne działanie ich aplikacji, rejestrowanie ma pewne wady.Czytelność dziennika:
Często aplikacje Android uruchamiają synchronicznie kilka dzienników. W związku z tym bardzo ważne jest, aby każdy dziennik był czytelny i zawierał tylko istotne, niezbędne informacje.Występ:
Rejestrowanie wymaga niewielkiej ilości zasobów systemowych. Zasadniczo nie uzasadnia to obaw, jednak w przypadku nadmiernego wykorzystania rejestrowanie może mieć negatywny wpływ na wydajność aplikacji.Bezpieczeństwo:
Ostatnio do Google Play dodano kilka aplikacji na Androida, które pozwalają użytkownikowi przeglądać dzienniki wszystkich działających aplikacji. Ten niezamierzony sposób wyświetlania danych może umożliwić użytkownikom przeglądanie poufnych informacji. Zasadniczo przed publikowaniem aplikacji na rynku zawsze usuwaj dzienniki zawierające niepubliczne dane.Wniosek:
Logowanie jest istotną częścią aplikacji na Androida, ze względu na moc, jaką daje programistom. Zdolność do utworzenia użytecznego śledzenia dziennika jest jednym z najtrudniejszych aspektów tworzenia oprogramowania, ale klasa Log w Androidzie ułatwia to.Aby uzyskać więcej dokumentacji i przykładów, zobacz Logowanie i korzystanie z Logcat
Zaloguj się z linkiem do źródła bezpośrednio z Logcat
Jest to fajna sztuczka, aby dodać link do kodu, więc łatwo będzie przejść do kodu, który wydał dziennik.
Z następującym kodem to wywołanie:
MyLogger.logWithLink("MyTag","param="+param);
Spowoduje to:
07-26...012/com.myapp D/MyTag: MyFrag:onStart(param=3) (MyFrag.java:2366) // << logcat converts this to a link to source!
To jest kod (wewnątrz klasy o nazwie MyLogger):
static StringBuilder sb0 = new StringBuilder(); // reusable string object
public static void logWithLink(String TAG, Object param) {
StackTraceElement stack = Thread.currentThread().getStackTrace()[3];
sb0.setLength(0);
String c = stack.getFileName().substring(0, stack.getFileName().length() - 5); // removes the ".java"
sb0.append(c).append(":");
sb0.append(stack.getMethodName()).append('(');
if (param != null) {
sb0.append(param);
}
sb0.append(") ");
sb0.append(" (").append(stack.getFileName()).append(':').append(stack.getLineNumber()).append(')');
Log.d(TAG, sb0.toString());
}
Jest to podstawowy przykład, można go łatwo rozszerzyć, aby wydał link do dzwoniącego (wskazówka: stos będzie wynosił [4] zamiast [3]), a także można dodać inne istotne informacje.
Korzystanie z Logcat
Logcat to narzędzie wiersza polecenia, które zrzuca dziennik komunikatów systemowych, w tym ślady stosu, gdy urządzenie generuje błąd i komunikaty napisane z aplikacji za pomocą klasy Log.
Dane wyjściowe Logcat można wyświetlić w Monitorze systemu Android Studio lub za pomocą wiersza polecenia adb.
W Android Studio
Pokaż, klikając ikonę „Monitor Android”: Lub naciskając Alt + 6 w systemie Windows / Linux lub CMD + 6 w systemie Mac.
za pomocą wiersza poleceń:
Proste użycie:
$ adb logcat
Ze znacznikami czasu:
$ adb logcat -v time
Filtruj według określonego tekstu:
$ adb logcat -v time | grep 'searchtext'
Udokumentowano tutaj wiele opcji i filtrów dla logcat wiersza poleceń .
Prostym, ale przydatnym przykładem jest następujące wyrażenie filtru, które wyświetla wszystkie komunikaty dziennika z priorytetem „błąd” we wszystkich znacznikach:
$ adb logcat *:E
Generowanie kodu rejestrującego
Live templates
Android Studio
mogą oferować sporo skrótów do szybkiego logowania.
Aby korzystać z aktywnych szablonów, wystarczy zacząć pisać nazwę szablonu i nacisnąć TAB
lub Enter, aby wstawić instrukcję.
Przykłady:
-
logi
→ zamienia się w →android.util.Log.i(TAG, "$METHOD_NAME$: $content$");
-
$METHOD_NAME$
zostanie automatycznie zastąpione nazwą twojej metody, a kursor będzie czekał na wypełnienie treści.
-
-
loge
→ to samo, dla błędu - itp. dla pozostałych poziomów rejestrowania.
Pełna lista szablonów znajduje się w ustawieniach Android Studio
( ALT + si wpisz „na żywo”). Możliwe jest również dodawanie własnych szablonów.
Jeśli uznasz, że Live templates
Android Studio
nie są wystarczające dla twoich potrzeb, możesz rozważyć wtyczkę Postfix dla Androida
Jest to bardzo przydatna biblioteka, która pomaga uniknąć ręcznego wpisywania wiersza rejestrowania.
Składnia jest absolutnie prosta:
.log - Logowanie. Jeśli istnieje stała zmienna „TAG”, należy użyć „TAG”. W przeciwnym razie użyj nazwy klasy.
Korzystanie z Android Studio
Wyłącz / włącz otwieranie okna dziennika podczas uruchamiania aplikacji do uruchamiania / debugowania
Wyczyść dzienniki
Aby wyczyścić (opróżnić) cały dziennik:
adb logcat -c