Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Registrar Eventos Formateados

Nuestros ethical hackers explican que son las bitácoras, porque es importante utilizarlas y cual es la manera adecuada de generar dichos informes en una aplicación Java utilizando diferentes formatos personalizados con el fin de hacerlas agradables y entendibles.

Necesidad

Establecer un formato a los eventos que se registren en el log de la aplicación

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se dispone de una aplicación Java conforme con la especificación del lenguaje 1.4.2 o superior.

Solución

Una bitácora o log es una grabación secuencial en un archivo o en una base de datos de todos los acontecimientos (eventos o acciones) que afectan a un proceso particular (aplicación, actividad de una red informática, etc.). De esta forma constituye una evidencia del comportamiento del sistema.[1]

Generalmente los acontecimientos vienen anotados con el momento exacto o data (fecha, hora, minuto, segundo) en el que ocurrió, lo que permite analizar paso a paso la actividad. Además, una o más categorizaciones del acontecimiento registrado. Es frecuente usar categorías distintas para distinguir la importancia del acontecimiento estableciendo distintos niveles de registro los cuales suelen ser: depuración, información, advertencia y error.

El uso de bitácoras puede servir para:

  • Análisis forense.

  • Detección de intrusos.

  • Depuración de errores.

  • Motorización.

  • Cumplir con las leyes establecidas.

  • Auditoría.

    1. El API estándar de bitácoras de Java, se forma principalmente por el concepto de logger. Dicho concepto corresponde a un nombre de estructura jerárquica similar a la de los paquetes y clases, además representa una configuración particular para grabar eventos. Así, una clase, paquete o aplicación particular puede tener un logger particular cuya configuración puede ser cambiada en tiempo de despliegue.

    2. Además, Java proporciona la forma de establecer un formato para el registro de eventos. Para ello existen dos tipos de formatos que son SimpleFormatter y XMLFormatter. Para establecer un formato personalizado se debe crear una clase que herede de la clase java.util.logging.Formatter.

      MyFormatter.java
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      import java.util.logging.Formatter;
      import java.util.logging.LogRecord;
      
      public class MyFormatter extends Formatter
      {
        public String format(LogRecord record)
        {
          return("MyFormatter: " + record.getLevel().intValue()
            + " - " + record.getMessage() + System.getProperty("line.separator"));
        }
      }
      
    3. En el formato anterior, se define que cada registro de evento debe contener la palabra reservada MyFormatter, el valor del nivel del evento y el mensaje que describe el evento ocurrido.

    4. Para crear un objeto logger en la aplicación, es necesario importar las siguientes clases.

      CLI.java
      1
      2
      3
      4
      import java.util.logging.FileHandler;
      import java.util.logging.Level;
      import java.util.logging.Logger;
      import java.util.logging.SimpleFormatter;
      
    5. Para crear una instancia de la clase Logger se debe invocar el método estático Logger.getLogger pasandole como parámetro el nombre del logger.

      1
      2
      3
      4
      5
      class CLI
      {
        public static void main(String argv[]) throws Exception
        {
          Logger logger = Logger.getLogger(“”);
      
    6. Luego se configura el manejador de eventos que se encargará de registrar el evento a una salida especifica.

      1
      FileHandler fh = new FileHandler("CLI.log");
      
    7. El formato personalizado creado anteriormente debe asignarse al manejador de eventos que, en última instancia, es quien registra el evento según el formato definido.

      1
      fh.setFormatter(new MyFormatter());
      
    8. Luego se establece el nivel del evento que se quiere registrar en el archivo de log y se agrega el manejador de eventos al logger.

      1
      2
      logger.setLevel(Level.ALL);
      logger.addHandler(fh);
      
    9. Se registran algunos eventos de diferentes niveles en el log de la aplicación llamado CLI.log.

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
          logger.info("procesando...");
          try
          {
            throw(new Exception());
          }
          catch (Exception e)
          {
            logger.log(Level.WARNING, "houston... we've got a problem", e);
          }
          logger.fine("hecho!");
        }
      }
      
    10. Se compila y ejecuta el programa

      salida.shell
      1
      2
      3
      4
      5
      6
      7
      $ javac MyFormatter.java
      $ javac CLI.java
      $ java CLI
      $ cat CLI.log
      MyFormatter: 800 - procesando...
      MyFormatter: 900 - houston... we've got a problem
      MyFormatter: 500 - hecho!
      

Descargas

Puedes descargar el código fuente pulsando en los siguientes enlaces:

MyFormatter.java Clase MyFormatter.

Cli.java Clase Cli.




Haz un comentario

Estado de los servicios - Términos de Uso