Zoeken…


Syntaxis

  • 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)

parameters

Optie Beschrijving
-b (buffer) Laadt een alternatieve logbuffer voor weergave, zoals evenementen of radio. De hoofdbuffer wordt standaard gebruikt. Zie Alternatieve logbuffers bekijken.
-C Wist (spoelt) het hele logboek en wordt afgesloten.
-d Dumpt het logboek naar het scherm en wordt afgesloten.
-f (bestandsnaam) Schrijft uitvoer van logboekberichten naar (bestandsnaam). De standaardwaarde is stdout.
-g Drukt de grootte van de opgegeven logbuffer af en wordt afgesloten.
-n (tellen) Stelt het maximale aantal geroteerde logboeken in op (aantal). De standaardwaarde is 4. Vereist de optie -r.
-r (kbytes) Roteert het logbestand elke (kbytes) uitvoer. De standaardwaarde is 16. Vereist de optie -f.
-s Stelt de standaard filterspecificatie in op stil.
-v (indeling) Stelt het uitvoerformaat in voor logberichten. De standaardinstelling is kort.

Opmerkingen

Definitie

Logcat is een opdrachtregelprogramma dat een logboek van systeemberichten dumpt, inclusief stapelsporen wanneer het apparaat een fout genereert en berichten die u vanuit uw app met de klasse Log hebt geschreven.

Wanneer te gebruiken

Als u overweegt om de System.out-methoden van Java te gebruiken om naar de console af te drukken in plaats van een van de Log-methoden van Android, dan moet u weten dat ze in principe hetzelfde werken. Het is echter beter om het gebruik van Java's methoden te vermijden, omdat de extra informatie en opmaak van de Log-methoden van Android voordeliger zijn. De afdrukmethoden van System.out worden ook omgeleid naar de methode Log.i() .

De logcat-uitvoer filteren

Het is handig om de logcat-uitvoer te filteren omdat er veel berichten zijn die niet interessant zijn. Om de uitvoer te filteren, opent u de "Android Monitor" en klikt u op de vervolgkeuzelijst rechtsboven en selecteert u Filterconfiguratie bewerken

Android-monitor

U kunt nu aangepaste filters toevoegen om interessante berichten weer te geven, evenals bekende logregels die veilig kunnen worden genegeerd. Als u een deel van de uitvoer wilt negeren, kunt u een reguliere expressie definiëren. Hier is een voorbeeld van het uitsluiten van overeenkomende tags:

^(?!(HideMe|AndThis))

Dit kan worden ingevoerd door dit voorbeeld te volgen:

Maak een nieuwe logcat-filter

Het bovenstaande is een reguliere expressie die invoer uitsluit. Als u nog een tag aan de zwarte lijst wilt toevoegen, voegt u deze toe na een pipe | karakter. Als u bijvoorbeeld "GC" op de zwarte lijst wilt plaatsen, zou u een filter als deze gebruiken:

^(?!(HideMe|AndThis|GC))

Ga voor meer documentatie en voorbeelden naar Loggen en Logcat gebruiken

logging

Elke Android-applicatie van goede kwaliteit houdt bij wat het doet via applicatielogboeken. Met deze logboeken kan de ontwikkelaar eenvoudig de fout opsporen om te diagnosticeren wat er aan de hand is met de toepassing. Volledige Android documentatie kan worden gevonden hier , maar een samenvatting volgt:


Basisregistratie

De klasse Log is de belangrijkste bron voor het schrijven van ontwikkelaarslogboeken door een tag en een message . Met de tag kunt u logboekberichten filteren op welke lijnen uit uw specifieke activiteit komen. Gewoon bellen

Log.v(String tag, String msg);

En het Android-systeem schrijft een bericht naar de 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

TIP:
Let op het proces-ID en de thread-ID. Als ze hetzelfde zijn, komt het logboek uit de hoofdthread / UI-thread!

Elke tag kan worden gebruikt, maar het is gebruikelijk om de klassenaam als tag te gebruiken:

public static final String tag = MyAnimator.class.getSimpleName();

Logniveaus

De Android-logger heeft 6 verschillende niveaus, die elk een bepaald doel dienen:

  • ERROR : Log.e()
    • Wordt gebruikt om kritieke fouten aan te geven, dit is het niveau waarop wordt afgedrukt bij het genereren van een Exception .
  • WARN : Log.w()
    • Wordt gebruikt om een waarschuwing aan te geven, voornamelijk voor herstelbare storingen
  • INFO : Log.i()
    • Wordt gebruikt om informatie op een hoger niveau aan te geven over de status van de toepassing
  • DEBUG : Log.d()
    • Wordt gebruikt om informatie vast te leggen die nuttig zou zijn om te weten wanneer u de foutopsporing in de toepassing opheft, maar die in de weg zou kunnen staan bij het uitvoeren van de toepassing
  • VERBOSE : Log.v()
    • Wordt gebruikt om informatie te loggen die de kleine details over de status van de applicatie weergeeft
  • ASSERT : Log.wtf()
    • Wordt gebruikt om informatie vast te leggen over een toestand die nooit zou mogen voorkomen.
    • wtf staat voor "What a Terrible Failure".

Motivatie voor logboekregistratie

De motivatie voor logboekregistratie is om eenvoudig fouten, waarschuwingen en andere informatie te vinden door de reeks gebeurtenissen van de toepassing te bekijken. Stel je bijvoorbeeld een toepassing voor die regels uit een tekstbestand leest, maar er ten onrechte van uitgaat dat het bestand nooit leeg zal zijn. De logtracering (van een app die niet logt) ziet er ongeveer zo uit:

E/MyApplication: Process: com.example.myapplication, PID: 25788
                          com.example.SomeRandomException: Expected string, got 'null' instead

Gevolgd door een stapel stacksporen die uiteindelijk zouden leiden tot de overtredende lijn, waar doorgaan met een debugger uiteindelijk tot het probleem zou leiden

De logtracering van een toepassing waarvoor logboekregistratie is ingeschakeld, kan er echter ongeveer zo uitzien:

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

Een snelle blik op de logs en het is duidelijk dat het bestand leeg was.


Overwegingen bij het loggen:

Hoewel logboekregistratie een krachtig hulpmiddel is waarmee Android-ontwikkelaars meer inzicht kunnen krijgen in de interne werking van hun applicatie, heeft logregistratie wel een aantal nadelen.

Log leesbaarheid:

Het is gebruikelijk dat Android-applicaties meerdere logboeken synchroon hebben. Als zodanig is het erg belangrijk dat elk logboek gemakkelijk leesbaar is en alleen relevante, noodzakelijke informatie bevat.

Prestatie:

Loggen vereist een kleine hoeveelheid systeembronnen. Over het algemeen is dit geen reden tot bezorgdheid, maar als ze te veel worden gebruikt, kan logboekregistratie een negatieve invloed hebben op de prestaties van de toepassing.

Veiligheid:

Onlangs zijn verschillende Android-applicaties toegevoegd aan de Google Play-marktplaats waarmee de gebruiker logboeken van alle actieve applicaties kan bekijken. Door deze onbedoelde weergave van gegevens kunnen gebruikers mogelijk vertrouwelijke informatie bekijken. Verwijder als vuistregel altijd logboeken met niet-openbare gegevens voordat u uw toepassing op de markt publiceert.


Conclusie:

Logboekregistratie is een essentieel onderdeel van een Android-applicatie, vanwege de kracht die het geeft aan ontwikkelaars. De mogelijkheid om een nuttige logtracering te maken is een van de meest uitdagende aspecten van softwareontwikkeling, maar de Log-klasse van Android helpt het veel gemakkelijker te maken.


Ga voor meer documentatie en voorbeelden naar Loggen en Logcat gebruiken

Dit is een leuke truc om een link naar code toe te voegen, dus het zal gemakkelijk zijn om naar de code te springen die het logboek heeft uitgegeven.

Met de volgende code, deze oproep:

MyLogger.logWithLink("MyTag","param="+param);


Zal resulteren in:

07-26...012/com.myapp D/MyTag: MyFrag:onStart(param=3)  (MyFrag.java:2366) // << logcat converts this to a link to source!

Dit is de code (binnen een klasse met de naam 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());
}

Dit is een eenvoudig voorbeeld, het kan eenvoudig worden uitgebreid om een link naar de beller te geven (hint: de stapel is [4] in plaats van [3]) en u kunt ook andere relevante informatie toevoegen.

De Logcat gebruiken

Logcat is een opdrachtregelprogramma dat een logboek van systeemberichten dumpt, inclusief stapelsporen wanneer het apparaat een fout genereert en berichten die u vanuit uw app met de klasse Log hebt geschreven.

De Logcat-uitvoer kan worden weergegeven in Android Monitor van Android Studio of met een adb-opdrachtregel.

In Android Studio

Weergeven door te klikken op het pictogram "Android Monitor": voer hier de afbeeldingsbeschrijving in Of door op Alt + 6 te drukken op Windows / Linux of CMD + 6 op Mac.

via opdrachtregel:

Eenvoudig gebruik:

$ adb logcat

Met tijdstempels:

$ adb logcat -v time

Filter op specifieke tekst:

$ adb logcat -v time | grep 'searchtext'

Er zijn veel opties en filters beschikbaar voor opdrachtregellogcat , hier gedocumenteerd.
Een eenvoudig maar nuttig voorbeeld is de volgende filterexpressie die alle logboekberichten met prioriteitsniveau "error" op alle tags weergeeft:

$ adb logcat *:E

Logboekcode genereren

Android Studio Live templates Android Studio kunnen nogal wat snelkoppelingen bieden om snel in te loggen.
Als u Live-sjablonen wilt gebruiken, hoeft u alleen maar de sjabloonnaam te typen en op TAB of Enter te drukken om de instructie in te voegen.

Voorbeelden:

  • logi → wordt → android.util.Log.i(TAG, "$METHOD_NAME$: $content$");
    • $METHOD_NAME$ wordt automatisch vervangen door de naam van uw methode en de cursor wacht tot de inhoud is gevuld.
  • loge → hetzelfde, voor fouten
  • etc. voor de rest van de logniveaus.

Een volledige lijst met sjablonen is te vinden in de instellingen van Android Studio ( ALT + s en type "live"). En het is mogelijk om ook uw aangepaste sjablonen toe te voegen.

Als u de Live templates Android Studio niet genoeg vindt voor uw behoeften, kunt u de Android Postfix-plug-in overwegen

Dit is een zeer nuttige bibliotheek die u helpt voorkomen dat u de logboekregel handmatig hoeft te schrijven.

De syntaxis is absoluut eenvoudig:

.log - Logboekregistratie. Als er constante variabele "TAG" is, gebruikt deze "TAG". Anders gebruikt u de klassenaam.

voer hier de afbeeldingsbeschrijving in

Gebruik van Android Studio

  1. Verberg / toon afgedrukte informatie: screenshot

  2. Controle uitgebreidheid van de logging: Log uitgebreide schermafdruk

  3. Schakel het openen van het logboekvenster uit bij het starten van de toepassing Run / Debug Schermafbeelding openen openingslogboek uitschakelen

Logboeken wissen

Om het hele logboek te wissen (doorspoelen):

adb logcat -c


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow