Come sviluppatore Android, tutti voi sapete che l’analisi dei log è una fase dello sviluppo e la incontriamo di tanto in tanto.
Ma l’analisi dei log è la cosa più impegnativa per il manutentore del codice o l’ingegnere di supporto.
Una volta che qualsiasi prodotto Android viene lanciato sul mercato e i clienti iniziano ad usarlo. Poi iniziano a venire i bug/problemi dello scenario reale ed è il lavoro principale per l’ingegnere di supporto/di manutenzione del progetto per analizzare il bug/problema con il set di log fornito.
Prima iniziamo con il tipo di Log disponibile sull’ecosistema Android:-
- Application Log
- System Log
- Event Log
- Radio Log
Il sistema di log di Android consiste in:
- un driver del kernel e buffer del kernel per memorizzare i messaggi di log
- C, C++ e classi Java per fare voci di log e accedere ai messaggi di log.
- Logcat (un programma standalone per la visualizzazione dei messaggi di log)
- DDMS (capacità di visualizzare e filtrare i messaggi di log dalla macchina host)
Android Log Buffer/container
- main – il log principale dell’applicazione
- events – per informazioni sugli eventi di sistema
- radio – per informazioni relative a radio e telefono-
- system – un log per messaggi di sistema di basso livello e debug
Cosa contiene il messaggio Log:-
Ogni messaggio nel log consiste in
- Un tag che indica la parte del sistema o dell’applicazione da cui proviene il messaggio
- Un timestamp (a che ora è arrivato questo messaggio)
- Il livello di log del messaggio (o priorità dell’evento rappresentato dal messaggio) e
- Il messaggio di log stesso (descrizione dettagliata dell’errore o dell’eccezione o dell’informazione ecc)
Cosa contiene ogni tipo di log:-
1. Log dell’applicazione
- utilizza i metodi della classe android.util.Log per scrivere messaggi di diversa priorità nel log
- Le classi Java dichiarano il loro tag staticamente come una stringa, che passano al metodo log
- Il metodo log usato indica la “severità” del messaggio (o livello log)
- I messaggi possono essere filtrati per tag o priorità quando i log vengono elaborati da strumenti di recupero (logcat)
2. Log di sistema
- Utilizza la classe android.util.Slog per scrivere un messaggio con priorità diversa con i suoi messaggi associati
- Molte classi del framework Android utilizzano il log di sistema per mantenere i loro messaggi separati dai messaggi (eventualmente rumorosi) del log dell’applicazione
- Un messaggio formattato viene consegnato attraverso la libreria C/C++ fino al driver del kernel, che memorizza il messaggio nel buffer appropriato (buffer di sistema)
3. Event log
- I messaggi del log degli eventi sono creati utilizzando la classe android.util.EventLog, che crea messaggi di log in formato binario.
- Le voci del log consistono in codici tag binari, seguiti da parametri binari.
- I codici tag dei messaggi sono memorizzati sul sistema in: /system/etc/event-log-tags.
- Ogni messaggio ha la stringa del messaggio di log, così come i codici che indicano i valori associati a (memorizzati con) quella voce.
4. Radio log
- Utilizzato per informazioni relative alla radio e al telefono (modem)
- Le voci del log consistono in codici binari di tag e messaggi per informazioni sulla rete
- Il sistema di log instrada automaticamente i messaggi con tag specifici nel buffer della radio
Il formato del log su Android
di seguito è il formato comune del log in Android
tv_sec tv_nsec priority pid tid tag messageLen Message
tag: tag del log
tv_sec & tv_nsec: il timestamp dei messaggi di log
pid: l’id del processo da cui provengono i messaggi di log
tid: l’id del thread
Il valore della priorità è uno dei seguenti valori di carattere, ordinati dalla priorità più bassa alla più alta:
V – Verbose (priorità più bassa)*
D – Debug*
I – Info*
W – Warning*
E – Error*
F – Fatal*
S – Silent (priorità più alta, su cui non viene mai stampato nulla)
Log-File locations
Ci sono diverse directory dove i log (inclusi quelli dei crash) vengono memorizzati e non sono standardizzati (es.cioè alcuni possono essere specifici della ROM). Ne sto mettendo alcune comuni qui.
- /data/anr : Dalvik scrive tracce di stack qui su ANR, cioè “Application Not Responding” aka “Force-Close”
- /data/dontpanic : contiene alcuni log di crash incluse le tracce
- /data/kernelpanics :- Memorizza i log relativi al “kernel panic”
- /data/tombstones :- può contenere diversi file tombstone_nn (nn è un numero da 0 a 10 e dopo 10 lo ripete di nuovo)
Strumento a riga di comando ‘Log’
Per catturare i log dai dispositivi android/emulatore Di seguito è riportato qualche strumento a riga di comando. Nei progetti di vita reale, ci sono applicazioni/strumenti di cattura dei log utilizzati per catturare i log sul dispositivo dell’utente e condividerli di nuovo con lo sviluppatore/manutentore per l’analisi.
- adb logcat (mostra tutti i tipi di log per il sistema Android corrente
- adb logcat -v threadtime (includerà data e ora)
- adb logcat -v threadtime > logfile.txt (memorizza i log in logfile.txt)
Modelli di filtro utili
Puoi usare il filtro seguente nel tuo comando adb per filtrare i log. Puoi anche usare questo filtro per cercare il tuo file di logs (logs forniti dal dispositivo utente).
- adb logcat -f <output_file> Salva tutti i logs in un file
- adb logcat “*:E” Ottieni tutti gli errori e i fatals
- adb logcat | grep -i “foo.example.” #ottenere tutti i log relativi a “pippo.esempio.*” tagname
- adb logcat “application_or_tag_name:*” “*:S” Ottieni tutti i log per nome dell’applicazione
- adb logcat -b events “gsm_service_state_change” “*:S” Ottieni tutti i cambiamenti di stato GSM
- adb logcat -b radio Ottieni tutti gli eventi Radio
Log Analysis
Finora abbiamo ottenuto tutta l’esposizione fondamentale del sistema di log Android. Ora è il momento di analizzare i log provenienti dalla vostra applicazione o dall’utente finale. Qui possiamo dividere l’analisi dei log in due parti
- Debug Log:- file di log provenienti durante lo sviluppo e la fase di test
- Production Log:- file di log provenienti direttamente dall’utente finale.
Quindi indovina quale è difficile quello di produzione giusto? Quindi qual è l’approccio migliore per eseguire il debug e ottenere le informazioni desiderate dai log catturati? Come ho discusso sopra, possiamo farlo utilizzando
- “utili modelli di filtro” e
- utilizzando alcuni strumenti (esempio LogRabit, GoogleLogTool, e SonyLogTool)
Così nell’ultima analisi dei log Android è un apprendimento continuo e utilizzando il tuo processo di esperienza. Personalmente ho analizzato i log tramite filtri e strumenti pertinenti con la mia esperienza passata.
Ma una cosa è buona Ogni analisi Android (problema dell’utente finale / bug log) ti dà nuovo apprendimento ed esperienza. Quindi continua a farlo e goditi la tua vita come codificatore e manutentore del sistema android😎😎😎
.