Android
Registro y uso de Logcat
Buscar..
Sintaxis
-
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)
Parámetros
Opción | Descripción |
---|---|
-b (buffer) | Carga un búfer de registro alternativo para ver, como eventos o radio. El búfer principal se utiliza por defecto. Consulte Visualización de búferes de registro alternativos. |
-do | Borra (vacía) todo el registro y sale. |
-re | Vuelca el registro en la pantalla y sale. |
-f (nombre de archivo) | Escribe la salida del mensaje de registro en (nombre de archivo). El valor predeterminado es stdout. |
-sol | Imprime el tamaño del búfer de registro especificado y sale. |
-n (contar) | Establece el número máximo de registros rotados a (contar). El valor predeterminado es 4. Requiere la opción -r. |
-r (kbytes) | Gira el archivo de registro cada (kbytes) de salida. El valor predeterminado es 16. Requiere la opción -f. |
-s | Establece la especificación de filtro por defecto en silencio. |
-v (formato) | Establece el formato de salida para los mensajes de registro. El valor predeterminado es formato breve. |
Observaciones
Definición
Logcat es una herramienta de línea de comandos que descarga un registro de los mensajes del sistema, incluidos los seguimientos de la pila cuando el dispositivo emite un error y los mensajes que ha escrito desde su aplicación con la clase de registro .
Cuándo usar
Si está considerando usar los métodos System.out de Java para imprimir en la consola en lugar de usar uno de los métodos de registro de Android, entonces debe saber que básicamente funcionan de la misma manera. Sin embargo, es mejor evitar el uso de los métodos de Java porque la información adicional y el formato proporcionado por los métodos de registro de Android son más beneficiosos. Además, los métodos de impresión System.out se redirigen al método Log.i()
.
Enlaces útiles
- Documentación oficial del desarrollador de Android para Log y logcat .
- Pregunta de Stackoveflow : Android Log.v (), Log.d (), Log.i (), Log.w (), Log.e () - ¿Cuándo usar cada uno?
Filtrado de la salida logcat
Es útil filtrar la salida logcat porque hay muchos mensajes que no son de interés. Para filtrar la salida, abra el "Monitor de Android" y haga clic en el menú desplegable en la parte superior derecha y seleccione Editar configuración de filtro
Ahora puede agregar filtros personalizados para mostrar los mensajes de interés, así como también filtrar las líneas de registro conocidas que pueden ignorarse de forma segura. Para ignorar una parte de la salida, puede definir una expresión regular . Aquí hay un ejemplo de exclusión de etiquetas coincidentes:
^(?!(HideMe|AndThis))
Esto se puede introducir siguiendo este ejemplo:
Lo anterior es una expresión regular que excluye entradas. Si desea agregar otra etiqueta a la lista negra , agréguela después de una tubería |
personaje. Por ejemplo, si quisiera poner en la lista negra "GC", usaría un filtro como este:
^(?!(HideMe|AndThis|GC))
Para más documentación y ejemplos, visite Logging y use Logcat
Explotación florestal
Cualquier aplicación de Android de calidad hará un seguimiento de lo que está haciendo a través de los registros de aplicaciones. Estos registros permiten una fácil depuración de la ayuda para que el desarrollador pueda diagnosticar qué está sucediendo con la aplicación. La documentación completa de Android se puede encontrar aquí , pero a continuación se presenta un resumen:
Registro basico
La clase deLog
es la fuente principal de escritura de registros de desarrollador, especificando una tag
y un message
. La etiqueta es lo que puede usar para filtrar los mensajes de registro para identificar qué líneas provienen de su Actividad en particular. Simplemente llama Log.v(String tag, String msg);
Y el sistema Android escribirá un mensaje al 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
PROPINA:
Observe la identificación del proceso y la identificación del hilo. Si son iguales, ¡el registro proviene del hilo principal / UI!
Se puede usar cualquier etiqueta, pero es común usar el nombre de la clase como una etiqueta:
public static final String tag = MyAnimator.class.getSimpleName();
Niveles de registro
El registrador de Android tiene 6 niveles diferentes, cada uno de los cuales cumple un determinado propósito:-
ERROR
:Log.e()
- Utilizado para indicar una falla crítica, este es el nivel impreso al lanzar una
Exception
.
- Utilizado para indicar una falla crítica, este es el nivel impreso al lanzar una
-
WARN
:Log.w()
- Se usa para indicar una advertencia, principalmente para fallas recuperables
-
INFO
:Log.i()
- Se utiliza para indicar información de nivel superior sobre el estado de la aplicación
-
DEBUG
:Log.d()
- Se utiliza para registrar información que sería útil saber al depurar la aplicación, pero se interpondría al ejecutar la aplicación.
-
VERBOSE
:Log.v()
- Se utiliza para registrar información que refleja los pequeños detalles sobre el estado de la aplicación
-
ASSERT
:Log.wtf()
- Se utiliza para registrar información sobre una condición que nunca debería ocurrir.
- wtf significa "What a Terrible Failure".
Motivación para la tala
La motivación para el registro es encontrar fácilmente errores, advertencias y otra información echando un vistazo a la cadena de eventos de la aplicación. Por ejemplo, imagine una aplicación que lee líneas de un archivo de texto, pero supone incorrectamente que el archivo nunca estará vacío. La traza de registro (de una aplicación que no registra) se vería así:E/MyApplication: Process: com.example.myapplication, PID: 25788
com.example.SomeRandomException: Expected string, got 'null' instead
Seguido de un montón de rastros de pila que eventualmente conducirían a la línea ofensiva, donde el paso con un depurador eventualmente conduciría al problema
Sin embargo, la traza de registro de una aplicación con el registro habilitado podría tener este aspecto:
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
Un vistazo rápido a los registros y es obvio que el archivo estaba vacío.
Cosas a tener en cuenta al iniciar sesión:
Si bien el registro es una herramienta poderosa que permite a los desarrolladores de Android obtener una mejor visión del funcionamiento interno de su aplicación, el registro tiene algunos inconvenientes.Legibilidad del registro:
Es común que las aplicaciones de Android tengan varios registros que se ejecutan de forma síncrona. Como tal, es muy importante que cada registro sea fácil de leer y solo contenga información relevante y necesaria.Actuación:
El registro requiere una pequeña cantidad de recursos del sistema. En general, esto no es motivo de preocupación, sin embargo, si se utiliza en exceso, el registro puede tener un impacto negativo en el rendimiento de la aplicación.Seguridad:
Recientemente, se han agregado varias aplicaciones de Android al mercado de Google Play que permiten al usuario ver los registros de todas las aplicaciones en ejecución. Esta visualización no intencionada de datos puede permitir a los usuarios ver información confidencial. Como regla general, siempre elimine los registros que contienen datos no públicos antes de publicar su aplicación en el mercado.Conclusión:
El registro es una parte esencial de una aplicación de Android, debido a la potencia que otorga a los desarrolladores. La capacidad de crear un registro de seguimiento útil es uno de los aspectos más desafiantes del desarrollo de software, pero la clase de registro de Android ayuda a hacerlo mucho más fácil.Para más documentación y ejemplos, visite Logging y use Logcat
Iniciar sesión con un enlace a la fuente directamente desde Logcat
Este es un buen truco para agregar un enlace al código, por lo que será fácil saltar al código que emitió el registro.
Con el siguiente código, esta llamada:
MyLogger.logWithLink("MyTag","param="+param);
Resultará en:
07-26...012/com.myapp D/MyTag: MyFrag:onStart(param=3) (MyFrag.java:2366) // << logcat converts this to a link to source!
Este es el código (dentro de una clase llamada 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());
}
Este es un ejemplo básico, se puede extender fácilmente para emitir un enlace a la persona que llama (sugerencia: la pila será [4] en lugar de [3]), y también puede agregar otra información relevante.
Usando el Logcat
Logcat es una herramienta de línea de comandos que descarga un registro de los mensajes del sistema, incluidos los seguimientos de la pila cuando el dispositivo emite un error y los mensajes que ha escrito desde su aplicación con la clase de registro.
La salida de Logcat se puede mostrar en el Android Monitor de Android Studio o con la línea de comandos adb.
En Android Studio
Mostrar haciendo clic en el icono "Android Monitor": O presionando Alt + 6 en Windows / Linux o CMD + 6 en Mac.
a través de la línea de comando:
Uso simple:
$ adb logcat
Con marcas de tiempo:
$ adb logcat -v time
Filtrar por texto específico:
$ adb logcat -v time | grep 'searchtext'
Hay muchas opciones y filtros disponibles para la línea de comandos logcat , documentados aquí .
Un ejemplo simple pero útil es la siguiente expresión de filtro que muestra todos los mensajes de registro con "error" de nivel de prioridad, en todas las etiquetas:
$ adb logcat *:E
Generando código de registro
Live templates
Android Studio
pueden ofrecer varios accesos directos para un registro rápido.
Para usar las plantillas de Live, todo lo que necesita hacer es comenzar a escribir el nombre de la plantilla y presionar TAB
o ingresar para insertar la declaración.
Ejemplos:
-
logi
→ se convierte en →android.util.Log.i(TAG, "$METHOD_NAME$: $content$");
-
$METHOD_NAME$
se reemplazará automáticamente con el nombre de su método, y el cursor esperará a que se llene el contenido.
-
-
loge
→ igual, por error - etc. para el resto de los niveles de registro.
La lista completa de plantillas se puede encontrar en la configuración de Android Studio
( ALT + sy tipo "en vivo"). Y también es posible agregar sus plantillas personalizadas.
Si encuentra que Android Studio
Live templates
Android Studio
Live templates
no son suficientes para sus necesidades, puede considerar Android Postfix Plugin
Esta es una biblioteca muy útil que le ayuda a evitar escribir la línea de registro manualmente.
La sintaxis es absolutamente simple:
.log - Logging. Si hay una variable constante "TAG", use "TAG". Si no, use el nombre de la clase.
Uso de Android Studio
Deshabilitar / habilitar la ventana de registro de apertura al iniciar la aplicación ejecutar / depurar
Borrar registros
Para borrar (vaciar) el registro completo:
adb logcat -c