sql >> Base de Datos >  >> RDS >> Database

Aprenda los conceptos básicos del registro de Java

Java incorporó una biblioteca API de registro como parte de su marco de JDK 1.4. Hoy en día, este es un soporte integrado de Java. Sin embargo, esta biblioteca es personalizable y extensible en el sentido de que podemos usar una o más soluciones de registro alternativas proporcionadas por bibliotecas de terceros. Aunque estas soluciones de terceros tienen un enfoque diferente para crear datos de registro, en última instancia comparten el mismo objetivo de registrar mensajes desde el tiempo de ejecución de la aplicación. Este artículo explora los conceptos básicos del registro y muestra cómo se puede utilizar en un programa Java.

Registro de Java

Un registro por lo general significa el mantenimiento de algún tipo de registro. Desde la perspectiva de la programación, es un proceso de escritura de mensajes en un archivo de registro durante la ejecución del programa. Los registros de mensajes persistentes son referidos, generalmente por el programador, para recopilar cierta información estadística de tiempo de ejecución que, cuando se analiza, puede revelar situaciones imprevistas. De hecho, puede haber numerosas razones distintas por las que se utiliza el registro y esta es solo una de ellas. Según la documentación de la API de Java, existen cuatro usos principales del registro:

  • Para el diagnóstico de problemas por parte de usuarios finales y administradores de sistemas.
  • Es conveniente que los ingenieros de servicio de campo diagnostiquen el problema a partir de los mensajes registrados y lo solucionen rápidamente.
  • La organización de desarrollo puede rastrear la ejecución interna de un subsistema en particular y analizarlo.
  • Los desarrolladores pueden depurar la aplicación en desarrollo obteniendo una visión rápida del problema subyacente a partir de los mensajes registrados.

El registro de API de Java está diseñado de manera económica en el sentido de que puede dejarse como un residuo incluso en una aplicación de producción. Esto no crea mucha sobrecarga para la eficiencia de la ejecución del programa. La API proporciona el mecanismo para cambiar la producción de mensajes de registro dinámicamente para que el impacto del registro pueda minimizarse durante las operaciones que requieren la máxima eficiencia. La API consta de una serie de clases e interfaces que se pueden personalizar ampliándolas. Toda la API de registro está empaquetada en java.util.logging . Las clases e interfaces de este paquete proporcionan las principales funciones de registro en Java.

Niveles de registro

La urgencia de iniciar sesión en un programa Java se puede clasificar en varios niveles. Al subir y bajar de nivel, podemos aumentar o disminuir el costo de iniciar sesión en una aplicación de producción. Así es como controlamos la eficiencia de ejecución de una aplicación donde es necesario registrar uno o más de sus eventos. Esto se logra a través de una clase llamada Nivel , que define la importancia del registro. El nivel de registro está ordenado y especificado por static constantes enteras, como:

  • Nivel.TODO: Todos los mensajes se registran, independientemente de su importancia
  • Nivel.DESACTIVADO: El registro está desactivado
  • Nivel.GRAVE: Indica falla grave; debe estar registrado
  • Nivel.ADVERTENCIA: Indica mensajes de advertencia
  • Nivel.INFO: Mensaje informativo en tiempo de ejecución
  • Nivel.CONFIG: Mensajes de configuración estática
  • Nivel.FINO: Seguimiento de mensajes
  • Nivel.FINER: Mensajes de rastreo detallados
  • Nivel.FINEST: Mensajes de seguimiento muy detallados

Componentes de registro

Necesitamos un Registrador instancia para realizar cualquier tipo de registro en Java. Esta instancia es responsable de registrar datos en un LogRecord . El Registro de registro las instancias se utilizan para pasar solicitudes de registro entre marcos de registro y controladores de registro individuales. Java SE proporciona cinco tipos de controladores integrados:StreamHandler , Manejador de consola , Manejador de archivos , SocketHandler y MemoryHandler . Sin embargo, se puede crear un nuevo controlador o extender uno de estos como una personalización. Los controladores determinan qué hacer con el registro; por ejemplo, se puede conservar en un repositorio local o pasarlo a un servidor a través de una red. Java SE también incluye dos formateadores estándar:SimpleFormatter y formato XML . Estos formateadores se utilizan para formatear un LogRecord en formato legible por humanos y formato XML estándar, respectivamente.

Hay un Gestor de registros clase que realiza un seguimiento de la información de registro global, como un espacio de nombres jerárquico de Loggers con nombre y un conjunto de propiedades de control de registro del archivo de configuración. Es fundamental para iniciar sesión en Java y controla prácticamente qué registrar, dónde iniciar sesión, incluidos otros detalles de inicialización, etc.

Un ejemplo de registro simple

Creando un Registrador objeto es muy simple. Aquí hay un código muy simple para ilustrar eso.

import java.util.logging.Logger;
public class App {
   private static Logger logger =
      Logger.getLogger(App.class.getName());
   public static void main(String[] args) {
      logger.info("This is a log message  !!!");
      logger.info("The name of the logger is " +
         logger.getName() + " nwhich is same as class name: "
            + App.class.getName());
   }
}

Registrador los objetos generalmente se nombran usando String valor de un espacio de nombres jerárquico separado por puntos. En el caso anterior, es el mismo que el nombre de la clase. Sin embargo, el nombre puede ser un valor de cadena arbitrario, pero normalmente los nombres se basan en el nombre del paquete o el nombre de la clase del componente registrado. También es posible crear un registrador "anónimo" que no se almacenará en el Registrador espacio de nombres.

Inicio de sesión en un archivo externo con formato XML

En el siguiente código, los mensajes de registro se redirigen a un archivo usando FileHandler .

Nota: El archivo se creará en el directorio del proyecto.

El Manejador de archivos puede escribir en un archivo específico o puede escribir en un conjunto rotativo de archivos. El conjunto rotativo de archivos significa que los archivos más antiguos se nombran agregando 0,1,2 y así sucesivamente al nombre del archivo base. El formateador XML es el formato predeterminado utilizado por FileHandler .

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
public class App {
   private static FileHandler fileHandler;
   private static Logger logger =
      Logger.getLogger(App.class.getName());
   public static void main(String[] args) throws
         IOException {
      fileHandler = new
         FileHandler(App.class.getName() + ".log");
      logger.setLevel(Level.ALL);
      logger.addHandler(fileHandler);
      logger.info("Log message redirected to a file");
      logger.info("The name of the logger is " +
         logger.getName() + 
            " nwhich is same as class name: "
            + App.class.getName());
   }
}

Inicio de sesión en un archivo externo con formato personalizado

Ajustaremos un poco el siguiente código para personalizar el formato del mensaje. Esto cambia cómo se escriben los mensajes en el archivo externo.

Nota: Observe el contenido del archivo de registro sobre cómo ha cambiado el formato.
import java.io.IOException;
import java.util.logging.*;
public class App {
   private static FileHandler fileHandler;
   private static Logger logger =
      Logger.getLogger(App.class.getName());
   public static void main(String[] args) throws
         IOException {
      fileHandler = new
         FileHandler(App.class.getName() + ".log");
      logger.setLevel(Level.ALL);
      fileHandler.setFormatter(newCustomFormatter());
      logger.addHandler(fileHandler);
      logger.fine("Log message redirected to a file");
      logger.finer("The name of the logger is " +
         logger.getName());
      loggerfinest("This is same as class name: " +
         App.class.getName());
   }
   private static class CustomFormatter extends Formatter {
      private static final String format =
          "[%1$tF %1$tT] [%2$-4s] %3$s %n";
      public String format(LogRecord record) {
         returnString.format(format,
            record.getMillis(),
            record.getLevel().getLocalizedName(),
            record.getMessage());
      }
   }
}

Eso es todo. Experimente con el registro de Java y pruebe muchas otras posibilidades. Consulte los documentos de la API de Java siempre que sea necesario.

Otros marcos de registro en Java

A veces, es conveniente usar un marco de registro de terceros, y hay bastantes populares para elegir. Por ejemplo, la API de registro proporcionada por SLF4J utiliza un patrón de fachada simple que es una capa de abstracción que permite que la aplicación se desacople de su marco de registro. Log4j es sintácticamente similar al registro de Java incorporado. Tiene una configuración predeterminada para enviar todos los mensajes de registro a la consola. Logback es un sucesor de Log4j y es una extensión de su predecesor. tinyLog es un marco de registro ligero que se puede usar tanto con Java como con Android.

Conclusión

El proceso de registro está diseñado para ser simple y eficiente en la entrega de lo que se supone que debe hacer. Es posible comenzar rápidamente con las API de registro en Java. El diseño es extensible y se puede personalizar según las necesidades finales del desarrollador. Este artículo es un vistazo a los conceptos básicos del registro de Java. Muchos detalles intrincados se omiten por simplicidad. Estudie la documentación de la API de Java y otros documentos apropiados para obtener más detalles al respecto.

Referencias

  • Descripción general del registro de Java
  • Documentación de la API de Java