En este post voy a mostrar algunos tips y recomendaciones para depurar nuestras apps y loguear mensajes en Android usando los métodos estáticos de Log, el Logcat de Android Studio y los métodos toString de las clases.
La etiqueta de Log
Es una buena práctica definir una etiqueta de log en nuestras actividades (Activities) o fragmentos en donde queremos depurar. Por ejemplo, veamos un fragmento que estoy programando:
public class AgregarLugaresFragmento extends Fragment {
// Aquí la etiqueta:
private static final String ETIQUETA_LOG = "AgregarLugaresFragmento";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(ETIQUETA_LOG, "Aquí vamos de nuevo");
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_agregar_lugar_fragment_paso2, container, false);
}
}
La parte importante es la definición de la etiqueta o tag para loguear. Aunque al inicio pensemos que es más fácil loguear sin etiqueta conforme pase el tiempo y agreguemos clases nos daremos cuenta de que estábamos equivocados.
Si te fijas, la etiqueta tiene el nombre de la clase, actividad o fragmento. Recomiendo dejarla así y definirla siempre tomando en cuenta el nombre de la clase en la que estamos.
Por favor, implementa toString
Es buena práctica definir el método toString
de una clase en Java, pues así podemos saber su estado. Veamos esta clase:
public class LugarParaVisitar {
public static String TIPO_PUBLICO = "publico";
public static String TIPO_PRIVADO = "privado";
private String direccion;
private LatLng cordenadas;
private String tipo;
public LugarParaVisitar() {
}
public LugarParaVisitar(String direccion, LatLng cordenadas, String tipo) {
this.direccion = direccion;
this.cordenadas = cordenadas;
this.tipo = tipo;
}
public String getDireccion() {
return direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
public LatLng getCordenadas() {
return cordenadas;
}
public void setCordenadas(LatLng cordenadas) {
this.cordenadas = cordenadas;
}
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
}
No tiene el método toString
, y no pasa nada si no lo definimos, pero al querer conocer el estado de la clase no podremos saberlo.
En cambio, si lo implementamos e imprimimos el valor de cada propiedad tendremos más datos al depurar y loguear.
No te preocupes por escribir el código tú mismo; Android Studio provee una manera de insertar el método. Ve a tu clase y presiona Alt + Insertar
. Ahí selecciona toString
:
En la siguiente ventana selecciona los campos que deseas devolver cuando el método sea llamado. Recomiendo seleccionar todos.
Ahora se habrá escrito el código necesario, no tuvimos que hacer nada manualmente. Más abajo verás por qué hacemos esto.
Es momento de loguear
Nada de lo de arriba es estrictamente necesario, pero ahora verás por qué lo hicimos. Como regla general recuerda:
- Definir la etiqueta del log en todas tus clases en donde vayas a loguear
- Definir el método
toString
de tus clases
Ahora sí, para loguear importa la clase:
import android.util.Log;
Después puedes llamar a muchos métodos de Log pero los que más destacan son d y e. El método Log.d
es para debug y el de Log.e
es para error.
La forma de llamar es:
Log.d(etiqueta, mensaje);
Lo que hicimos antes va a brillar ahora. Por ejemplo, si quieres mostrar el estado del Lugar para visitar harías esto:
Log.d(ETIQUETA_LOG, "El lugar es:" + lugar.toString());
Esa sintaxis también aplica para Log.e
y los demás métodos.
Monitor de Android
¿En dónde están los mensajes que imprimimos? ahora lo sabremos. Cuando ya hayas ejecutado la app y tu dispositivo esté conectado por cable o de manera inalámbrica abre el Logcat.
En el punto 1 tenemos el dispositivo. En el 2 puedes seleccionar la app que vas a depurar. En el 3 hay que seleccionar el tipo de mensajes que queremos ver. Si usamos Log.d deben ser debug, si es Log.e los de error.
En caso de que tu app tenga errores (no impresos por ti específicamente) siempre se encontrarán en la categoría de Error.
El punto 4 permite buscar ya sea por mensaje o por etiqueta. Ahí puedes escribir la etiqueta (aquí vemos su uso) y ver los mensajes de la clase que te interesa.
Finalmente en el paso 5 vemos lo que hay en el Log, lo cual es el lugar con todas sus propiedades.
Conclusión
Esto viene siendo el console.log
o el System.out.println
de Android. Gracias a esto podemos saber lo que está pasando y también podemos conocer qué errores se están ocasionando en nuestra app.
Te invito a leer más tutoriales de Android en mi blog.