2011-10-30 13 views
11

Quando stavo scrivendo un wrapper di registro per la mia applicazione Android ho notato uno strano comportamento del metodo Log.isLoggable androids. L'esecuzione di codice seguente:Log.isLoggable restituisce valori errati?

final String TAG = "Test"; 
Log.v(TAG, "verbose is active: " + Log.isLoggable(TAG, Log.VERBOSE)); 
Log.d(TAG, "debug is active: " + Log.isLoggable(TAG, Log.DEBUG)); 
Log.i(TAG, "info is active: " + Log.isLoggable(TAG, Log.INFO)); 
Log.w(TAG, "warn is active: " + Log.isLoggable(TAG, Log.WARN)); 
Log.e(TAG, "error is active: " + Log.isLoggable(TAG, Log.ERROR)); 

produce seguente output LogCat:

VERBOSE/Test(598): verbose is active: false 
DEBUG/Test(598): debug is active: false 
INFO/Test(598): info is active: true 
WARN/Test(598): warn is active: true 
ERROR/Test(598): error is active: true 

Perché ottengo verbose ed eseguire il debug non è attivo anche se io produco queste uscite utilizzando la registrazione dettagliata ed eseguire il debug?

risposta

6

Tutti i livelli di registro vengono scritti su logcat indipendentemente dal livello di registro corrente. Il metodo isLogabble() può essere utilizzato come ottimizzazione per le tue app per impedire l'invio di istruzioni di log non necessarie su logcat. È inoltre possibile utilizzare il comando adb logcat per filtrare un sottoinsieme dei livelli di registrazione anche se la registrazione è impostata su verboso (vedere https://developer.android.com/studio/debug/am-logcat.html).

+0

Collegamento interrotto, si prega di aggiornarlo. –

2

Si dovrebbe usare

if (Log.isLoggable(TAG, Log.VERBOSE)) { 
    Log.v(TAG, "verbose is active: " + Log.isLoggable(TAG, Log.VERBOSE)); 
} 
12

Se si leggono le informazioni su Log.isLoggable(), si noterà che il livello di registrazione di default è INFO. Qualsiasi valore inferiore a quello (DEBUG e VERBOSE) farà sì che questo metodo restituisca false. Questo è il motivo per cui l'output risultante mostra questi due come false.

Tutte le chiamate Log.* vengono registrate nel logcat. Chiamare Log.isLoggable() è semplicemente un modo per ottimizzare la registrazione. Non è richiesto. In genere, chiamerai Log.isLoggable() prima della chiamata effettiva Log.* per stabilire se registrarla o meno.

È possibile ottimizzare la registrazione per TAG se si sceglie, con un file di supporto o tramite adb. La cosa bella di questo è che puoi convertire dinamicamente la registrazione su/giù/spento per ogni singolo TAG nella tua app senza la necessità di commentare manualmente le linee di log o implementare i tuoi controlli.

0

LOG verrà sempre stampato nel logcat indipendentemente dal ritorno di Log.isloggable().

Problemi correlati