Generare e analizzare i registri
Obiettivi di apprendimento
- Visualizzare i rapporti di debug in Log Inspector (Controllo registri) o in un editor di testo.
- Impostare vari livelli di registrazione per i registri di debug.
- Gestire e cambiare prospettiva utilizzando il Controllo registri.
Visualizzare i registri di debug
Un buon comandante esamina i registri di sistema per verificare che sia tutto in ordine. I registri sono uno dei posti migliori per identificare i problemi con un sistema o un programma. Utilizzando la Developer Console, puoi esaminare vari registri di debug per capire come funziona il codice e identificare eventuali problemi di prestazioni.
Visualizzare i registri nell'editor di testo
Visualizzare un registro di debug è semplice. Per generare un registro, eseguiamo la classe Apex EmailMissionSpecialist
creata prima.
- Prima dell'esecuzione, abilita Open Log (Apri registro) nella finestra Enter Apex Code (Inserisci codice Apex). Il registro si apre una volta eseguito il codice.
- Dopo l'esecuzione, fai doppio clic sul registro nella scheda Logs (Registri).
- Seleziona Debug | Open Execute Anonymous Window (Apri finestra di esecuzione anonima).
- La finestra Enter Apex Code (Inserisci codice Apex) mostra l'ultimo codice inserito per l'esecuzione. Se è diverso dal codice indicato qui di seguito, cancella e incolla quello al suo posto. Assicurati di sostituire Enter your email address (Inserisci indirizzo email) con il tuo indirizzo email.
EmailMissionSpecialist em = new EmailMissionSpecialist(); em.sendMail('Enter your email address', 'Flight Path Change', 'Mission Control 123: Your flight path has been changed to avoid collision ' + 'with asteroid 2014 QO441.');
- Seleziona l'opzione Open Log (Apri registro).
- Fai clic su Execute (Esegui).
Il registro di esecuzione visualizzato potrebbe sembrare un insieme confuso di numeri e parole, quindi vediamo come leggere e capire i dati del registro.
Leggere i dati di registro
Rieseguiamo EmailMissionSpecialist
, ma questa volta introduciamo un errore. Il registro risultante viene visualizzato nella scheda Logs (Registri).
- Seleziona Debug | Open Execute Anonymous Window (Apri finestra di esecuzione anonima). Fornisci un indirizzo email non valido, ad esempio
testingemail
.EmailMissionSpecialist em = new EmailMissionSpecialist(); em.sendMail('testingemail', 'Flight Path Change', 'Mission Control 123: Your flight path has been changed to avoid collision ' + 'with asteroid 2014 QO441.');
- Deseleziona l'opzione Open Log (Apri registro).
- Fai clic su Execute (Esegui). Dopo che il codice è stato eseguito il codice, viene visualizzata una finestra di dialogo in cui è incluso l'errore.
- Fai clic su OK, quindi fai doppio clic sul nuovo registro nella scheda Logs (Registri). Se non sai qual è il registro più recente, fai clic sull'intestazione della colonna Time (Data/Ora) per ordinare i registri in base al momento in cui sono stati generati.
- Timestamp: il momento in cui si è verificato l'evento. La marca temporale è sempre inserita nel fuso orario dell'utente nel formato HH:mm:ss:SSS.
-
Event (Evento): l'evento che ha attivato la voce del registro di debug. Ad esempio, nel registro di esecuzione che hai generato, l'evento
FATAL_ERROR
viene registrato quando l'indirizzo email non è valido. - Details (Dettagli): dettagli sulla riga di codice e sul nome del metodo di esecuzione.
Per modificare ciò che vedi in Execution Log (Registro di esecuzione), seleziona This frame (Questo frame) (a), Executable (Eseguibile) (b) o Debug Only (Solo debug) (c). La selezione di queste opzioni mostra solo alcuni tipi di eventi. Per esempio, Debug mostra solo gli eventi USER_DEBUG. Puoi anche filtrare diverse parti del registro usando Filter (Filtra) (d). Inserisci il nome di un metodo o qualsiasi altro testo tu stia cercando e il registro filtrerà i risultati.
Puoi anche visualizzare il rapporto di debug come un registro non elaborato, che mostra ulteriori informazioni. Seleziona File | Open Raw Log (Apri registro non elaborato). Il timestamp di un registro non elaborato mostra il tempo trascorso in nanosecondi (tra parentesi) dall'inizio dell'evento.
Questa combinazione di timestamp, evento e dettagli fornisce preziose informazioni sul funzionamento del codice e sugli errori che possono verificarsi.
Tutte queste informazioni sono utili, ma come fare per cercare rapidamente dei valori nel registro di debug? Un comandante, dopotutto, ha molte altre responsabilità. Un'ottima strategia è di utilizzare il metodo System.debug()
in Apex.
Il principale vantaggio di System.debug()
è che può essere aggiunto ovunque all'interno del codice per tenere traccia dei valori, semplificando l'esecuzione del debug.
System.debug()
. Per visualizzare un messaggio:System.debug('Your Message');
System.debug(yourVariable);
System.debug('Your Label: ' + yourVariable);
Usare Log Inspector (Controllo registri)
Log Inspector (Controllo registri) è uno strumento pratico che semplifica la visualizzazione dei registri di grandi dimensioni. Utilizzando le visualizzazioni dei riquadri dei registri, fornisce diverse prospettive del codice. Per dare un'occhiata, seleziona Debug | View Log Panels (Visualizza riquadri registro).
I riquadri registro cambiano la struttura del registro in modo da fornire altre informazioni utili sul contesto per il codice in esecuzione. Ad esempio, diversi riquadri mostrano origine, tempi di esecuzione, dimensione dell'heap e gerarchia delle chiamate. (Lo sappiamo, sono termini difficili, ma questa sezione non è neanche troppo tecnica. Ricorda che stiamo studiando la Developer Console, non gli elementi più complessi del debug. Quindi, se qualcosa non ti è molto chiaro, non preoccuparti.)
I riquadri registro interagiscono tra loro per aiutarti a eseguire il debug del codice. Ad esempio, facendo clic su una voce in Execution Log (Registro esecuzioni) o Stack Tree (Struttura stack), gli altri riquadri (Source [Sorgente], Source List [Elenco sorgenti], Variables [Variabili] e Execution Stack [Stack esecuzioni]) si aggiornano per mostrare le informazioni correlate.
- Stack Tree (Struttura stack): mostra le voci di registro nella gerarchia degli oggetti e la relativa esecuzione usando una visualizzazione struttura dall'alto verso il basso. Ad esempio, se una classe chiama una seconda classe, questa appare come secondaria.
- Execution Stack (Stack esecuzioni): mostra una vista dal basso dell'elemento selezionato. Mostra la voce di registro, seguita dall'operazione che l'ha chiamata.
- Execution Log (Registro esecuzioni): mostra ogni azione che si è verificata durante l'esecuzione del codice.
- Source (Sorgente): mostra il contenuto del file di origine, indicando la riga di codice in esecuzione quando è stata generata la voce di registro selezionata.
- Source List (Elenco sorgenti): mostra il contesto del codice eseguito quando è stato registrato l'evento. Ad esempio, se si seleziona la voce di registro generata quando è stato inserito un valore di indirizzo email non valido, l'elenco sorgenti mostra execute_anonymous_apex.
- Variables (Variabili): consente di visualizzare le variabili e i valori assegnati che risultavano pertinenti quando è stato eseguito il codice che ha generato la voce di registro selezionata.
- Execution Overview (Panoramica esecuzioni): mostra le statistiche per il codice in esecuzione, inclusi il tempo di esecuzione e la dimensione dell'heap.
Che cos'è Perspective Manager (Gestione prospettive) e come passare da una prospettiva all'altra?
Una prospettiva è un layout di riquadri raggruppati. Ad esempio, nella prospettiva Debug predefinita vengono mostrati Execution Log (Registro esecuzioni), Source (Origine) e Variables (Variabili), mentre nella prospettiva Analysis (Analisi) vengono mostrati Stack Tree (Struttura stack), Execution Log (Registro esecuzioni), Execution Stack (Stack esecuzioni) e Execution Overview (Panoramica esecuzioni).
Per scegliere una prospettiva, seleziona Debug | Switch Perspectives (Cambia prospettiva) o Debug | Perspective Manager (Gestore prospettive). È facile come passare da un riquadro di comunicazione all'altro e molto più semplice che decifrare nella stessa visualizzazione i registri dell'esperto di missioni, della stazione spaziale sulla Terra e del centro di controllo delle missioni su Marte.
Puoi anche creare la tua prospettiva. Configura la tua combinazione preferita di riquadri da visualizzare, quindi seleziona Debug | Save Perspective As (Salva prospettiva come). Inserisci un nome per la tua prospettiva, quindi fai clic su OK.
Modificare i dati di registro per trovare ciò che serve
Sei consapevole che a volte ci sono problemi col motore 3. Per evitare l'asteroide 2014 QO441, è fondamentale che questo motore funzioni a pieno regime. Eppure, ogni volta che si prova ad eseguire un controllo dei sistemi, alcune informazioni provengono da un robot pessimista. Il risultato? Rapporti confusi che prevedono una rivolta di robot, con conseguente aumento del numero di linee del registro e il rischio di perdere informazioni preziose.
È evidente che hai bisogno di controllare la quantità di informazioni registrate. Fortunatamente per te, la Developer Console può venirti in aiuto con le categorie di registri e i livelli di registrazione.
Log Categories (Categorie di registri)
Una categoria di registro è il tipo di informazioni che vengono registrate.
- ApexCode, che registra gli eventi relativi al codice Apex e include informazioni sull'inizio e la fine di un metodo Apex.
- Database, che include i registri relativi agli eventi del database, tra cui le query Database Manipulation Language (DML), SOSL e SOQL (che vedremo più avanti).
Log Levels (Livelli di registrazione) e come modificarli
Sembra che il motore 3 stia avendo di nuovo problemi. Mentre analizzi i registri per indagare la causa di questi problemi, vedi i messaggi di avvertimento inviati dal robot malinconico.
Un robot non può scatenare una rivolta, quindi non te ne preoccupi più di tanto. Il malfunzionamento del motore, invece, è un problema urgente. E se i messaggi del motore 3 si perdessero nel marasma dei dati di registro? Corri ai ripari con i livelli di registrazione!
NONE
) a quello in cui viene registrata la maggiore quantità di dati (livello = FINEST
).-
NONE
(NESSUNO) -
ERROR
(ERRORE) -
WARN
(AVVISO) -
INFO
(INFORMAZIONE) DEBUG
-
FINE
(DETTAGLIATO) -
FINER
(PIÙ DETTAGLIATO) -
FINEST
(MASSIMO DETTAGLIO)
I livelli di registrazione sono cumulativi. Ad esempio, se il livello di registrazione per un evento è INFO
, le informazioni di registro verranno incluse anche ai livelli ERROR
e WARN
. Se invece il livello di registro è ERROR
, vengono registrati solo i messaggi di errore. Per quella categoria di registro non verranno mostrati messaggi di avviso o altre informazioni di registro.
Le informazioni fornite da un livello di registrazione dipendono anche dall'evento di registro. Per diversi eventi di registro, la registrazione inizia a partire da determinati livelli. Per esempio, alcuni eventi ApexCode iniziano la registrazione in INFO
. Se imposti ERROR
come livello di registrazione, non otterrai alcuna informazione di registro per questo tipo di eventi.
Per ottenere le informazioni che cerchi, modifica i livelli di registrazione per diversi eventi. Supponiamo di voler eliminare il registro quando il robot salva i messaggi sulla presunta rivolta nel database. Imposta il livello di registrazione per la categoria Database (DB
) su NONE
o ERROR
.
Per impostare questi livelli, puoi selezionare Debug | Change Log Levels (Cambia livelli di registrazione).
Nella scheda General Trace Settings for You (Impostazioni generali di tracciamento per te), fai clic su Add/Change (Aggiungi/Cambia) (1). Nella finestra Change DebugLevel (Cambia DebugLevel), scegli il livello di registrazione per ogni categoria. Ricorda, usa i livelli di registrazione con giudizio. Se il tuo livello di registrazione è FINEST
(2), il codice può raggiungere i limiti di registrazione e richiedere più tempo per l'esecuzione. Non preoccuparti se non vedi tutti i livelli quando aggiorni il livello di registrazione per una categoria: vengono mostrati solo i livelli che aggiungono ulteriori registrazioni.
Fortunatamente, una volta disattivata la funzione di registrazione per gli avvisi del robot, potrai identificare facilmente il problema del motore 3: il livello del liquido di raffreddamento è basso. Di conseguenza, chiedi a un tecnico di riempire il serbatoio. Una volta lì, gli fai anche lubrificare le giunzioni del robot. Ora bisogna sperare che il pieno di lubrificante tiri un po' su di morale il robot.