Fluid Attacks logo
Login
Contact Us
Young hacker smiling
Zero false positives

Expert intelligence + effective automation

Contact logo Contact Us
GET A DEMO

Registrar Eventos Formateados

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
      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
      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.

      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.

      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.

      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.

      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.

          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
      $ 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.


Service status - Terms of Use