2011-10-30 25 views
11

Cuando escribía un contenedor de registro para mi aplicación de Android noté un comportamiento extraño del método Log.isLoggable de androides. La ejecución de código siguiente:¿Log.isLoggable devuelve valores incorrectos?

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 LogCat siguiente salida:

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 

¿Por qué recibo detallado y de depuración no se encuentra activo a pesar de que produzco estas salidas utilizando el registro detallado y depurar?

Respuesta

6

Todos los niveles de registro se escriben en el logcat, independientemente de cuál sea el nivel de registro actual. El método isLogabble() se puede utilizar como una optimización para sus aplicaciones para evitar el envío de sentencias de registro innecesarias a logcat. También puede usar el comando adb logcat para filtrar un subconjunto de los niveles de registro, incluso si el registro está configurado como detallado (consulte https://developer.android.com/studio/debug/am-logcat.html).

+0

Enlace roto, por favor actualícelo. –

2

Debe utilizar

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

Si usted lee la información sobre Log.isLoggable(), se dará cuenta de que el nivel de registro predeterminado es INFO. Cualquier cantidad inferior a eso (DEBUG y VERBOSE) hará que este método devuelva false. Esta es la razón por la que el resultado resultante muestra estos dos como false.

Todas las llamadas al Log.* se registran en el logcat. Llamar al Log.isLoggable() es simplemente una forma de ajustar el registro. No es obligatorio. Normalmente, llamará al Log.isLoggable() antes de la llamada real Log.* para determinar si desea iniciar sesión o no.

Puede sintonizar su registro por TAG si lo desea, ya sea con un archivo prop o vía adb. Lo bueno de esto es que puede activar/desactivar dinámicamente el registro para cada persona TAG en su aplicación sin la necesidad de comentar manualmente las líneas de registro o implementar sus propios controles.

0

LOG siempre se imprimirá en el logcat sin importar qué Log.isloggable() devuelva.

Cuestiones relacionadas