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

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

Android Monitor

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:

Utwórz nowy filtr logcat

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

Klasa Log 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 .
  • 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”: wprowadź opis zdjęcia tutaj 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.

wprowadź opis zdjęcia tutaj

Korzystanie z Android Studio

  1. Ukryj / pokaż drukowane informacje: Zrzut ekranu

  2. Kontroluj szczegółowość rejestrowania: Zrzut ekranu dziennika szczegółowości

  3. Wyłącz / włącz otwieranie okna dziennika podczas uruchamiania aplikacji do uruchamiania / debugowania Wyłącz zrzut ekranu dziennika otwarcia

Wyczyść dzienniki

Aby wyczyścić (opróżnić) cały dziennik:

adb logcat -c


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow