En nuestro día a día, el desarrollo de aplicaciones no siempre es perfecto, por lo que en muchas ocasiones necesitaremos saber si un error en concreto se presenta en producción, o bien durante un proceso de pruebas.

Una de las mejores prácticas para tener un respaldo o monitorear el trace de nuestras aplicaciones y así poder atacar errores, es implementando un registro de logs controlado, de tal manera que no se guarden datos delicados y tampoco vaya a saturar el file system del servidor donde se despliegue la aplicación, sino que nos permita conocer cuando una transacción da error o no se ejecuta correctamente.

Para realizar la implementación de logs en nuestra aplicación, debemos importar las siguientes librerías a nuestra clase principal o la clase que efectúe la transacción:

import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

Posterior a eso debemos crear una variable global que indique el nombre del paquete que vamos a monitorear, ya sea una cierta cantidad de clases o bien solo el paquete donde tenemos la clase a registrar, en mí caso el paquete se llama com.pruebas.proyecto:

private final static Logger LOG_MONITOREO = Logger.getLogger("com.pruebas.proyecto");

Ahora bien, con esto definido voy a explicar como escribir en el log con un ejemplo de una función, voy a irla explicando paso a paso en los comentarios:

public static String login(String usuario, String password){
     String res = "";
try {
     Handler consoleHandler = new ConsoleHandler(); //Estableceremos un manejador de errores
     Handler fileHandler = new FileHandler("C:/Users/Emmanuel GR/Desktop/logs/Monitoreo.log", true);
     /*Colocaremos la ruta donde se guardará el log, la propiedad true indica que siempre se escribirá sobre 
     el mismo archivo y no generará una copia hasta que este archivo sea igual a 5 mb de tamaño*/
     
      SimpleFormatter simpleFormatter = new SimpleFormatter();// Se establece únicamente para generar un formato para la presentación de los errores o el trace
      fileHandler.setFormatter(simpleFormatter);
      LOG_MONITOREO.addHandler(consoleHandler);
      LOG_MONITOREO.addHandler(fileHandler);

      consoleHandler.setLevel(Level.ALL); //Este comando comenzará el manejador de errores
      fileHandler.setLevel(Level.ALL); //Este comando se ejecuta para comenzar el proceso de registro del logger
      // En ambos comando se debe colocar el nivel de registro de errores en el log por ende se colocar Level.ALL

/*El siguiente comando se utilizará para registrar lo que necesitemos ver dentro del log, aquí es donde definimos que datos se imprimiran en él*/

LOG_MONITOREO.log(Level.INFO, "Nueva Solicitud de Logueo");
LOG_MONITOREO.log(Level.INFO, "Usuario: " + usuario);
LOG_MONITOREO.log(Level.INFO, "Contraseña: " + password);

//Esta validación la realizaremos únicamente como ejemplo

if(usuario.equals("emmax77") && password.equals("1234567")){
    LOG_MONITOREO.log(Level.INFO, "Logueo exitoso!");
    res = "Logueo exitoso!";
}else{
    LOG_MONITOREO.log(Level.WARNING, "Usuario o contraseña incorrecto");
    res = "Usuario o contraseña incorrecto";
}

//Luego de realizar los registros debemos cerrar el hilo de conexión a nuestro archivo

fileHandler.close();
consoleHandler.close();

} catch (Exception e) {
//Registraremos la exception que ocurra en nuestro log
    LOG_MONITOREO.log(Level.SEVERE, e.getMessage());
    res = "Error, consulte con su proveedor del servicio";
}
    return res;
}

Nota: Debemos tener en cuenta que al crear la ruta donde se guardará el log, en caso de que alguna carpeta no exista o se haya escrito mal, el programa dará un error

Ahora bien, creamos nuestro método main y llamaremos nuestra función login:

public static void main(String[] args) {
    String loginResponse = login("emmax77","1234567");
    System.out.println("Respuesta de la función: " + loginResponse);
}

Al ejecutarlo veremos que dentro de la carpeta logs en el escritorio, se creará un log llamado Monitoreo.log y dentro veremos la siguiente respuesta:

Vemos que el nivel de log es INFORMACIÓN, esto lo podemos cambiar dependiendo el nivel de gravedad que le queramos dar al error.

Existen diferente niveles de registro a la hora de imprimir un mensaje en un log, esto nos brindará un mejor filtro a la hora de revisar nuestro log, y así, determinar el nivel de gravedad del error.

Cada uno puede ser utilizado como nosotros queramos, en mi caso normalmente los uso así:

  • INFO: Datos referentes a una transacción exitosa.
  • WARNING: Errores de respuesta, ya sea de web service, una función, excepciones, entre otros.
  • SEVERE: Errores que puedan bloquear el funcionamiento de un proceso, o botar mi aplicación

De esta forma, según nuestro código, si un usuario coloca una contraseña errónea, entonces nos aparecerá un mensaje de tipo ADVERTENCIA en nuestro log:

De esta manera podemos hacer la implementación de la clase LOGGER en nuestra aplicación, y así tener un registro controlado de nuestros errores.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.