java logging java.util.logging

Buenos ejemplos usando java.util.logging



(6)

Quiero usar los registros en mi programa. Escuché sobre java.util.logging , pero no sé cómo empezar.

¿Hay algunos ejemplos de lo que puedo hacer con el registro? ¿Cómo usaría el registro en mi propio programa?


Debería declarar el registrador así:

private final static Logger LOGGER = Logger.getLogger(MyClass.class.getName());

así que si refactorizas tu nombre de clase sigue.

Escribí un artículo sobre java logger con ejemplos aquí .


Hay muchos ejemplos y también de diferentes tipos para el registro. Eche un vistazo al paquete java.util.logging .

Código de ejemplo:

import java.util.logging.Logger; public class Main { private static Logger LOGGER = Logger.getLogger("InfoLogging"); public static void main(String[] args) { LOGGER.info("Logging an INFO-level message"); } }

Sin codificar el nombre de la clase :

import java.util.logging.Logger; public class Main { private static final Logger LOGGER = Logger.getLogger( Thread.currentThread().getStackTrace()[0].getClassName() ); public static void main(String[] args) { LOGGER.info("Logging an INFO-level message"); } }


Le sugiero que use la utilidad de registro de recursos comunes de Apache. Es altamente escalable y admite archivos de registro separados para diferentes registradores. Ver aqui


SLF4J es una mejor fachada de registro que Apache Commons Logging (ACL). Tiene puentes con otros marcos de registro, las llamadas directas a ACL, Log4J o Java Util Logging pasan por SLF4J, de modo que puede dirigir toda la salida a un archivo de registro si lo desea, con solo un archivo de configuración de registro. ¿Por qué su aplicación usaría múltiples marcos de registro? Porque las bibliotecas de terceros que utilizas, especialmente las antiguas, probablemente sí.

SLF4J soporta varias implementaciones de registro. Puede enviar todo a la salida estándar, usar Log4J o Logback (recomendado sobre Log4J).

http://www.slf4j.org/

http://logback.qos.ch/


Yo uso minlog , personalmente. Es extremadamente simple, ya que la clase de registro es unos pocos cientos de líneas de código.


java.util.logging evita que tengas que cargar un archivo jar más con tu aplicación, y funciona bien con un buen formateador.

En general, en la parte superior de cada clase , debe tener:

private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() );

A continuación, puede utilizar varias instalaciones de la clase Logger .

Use Level.FINE para cualquier cosa que se esté depurando en el nivel superior del flujo de ejecución:

LOGGER.log( Level.FINE, "processing {0} entries in loop", list.size() );

Use Level.FINER / Level.FINEST dentro de los bucles y en lugares donde no siempre necesite ver tantos detalles al depurar problemas de flujo básicos:

LOGGER.log( Level.FINER, "processing[{0}]: {1}", new Object[]{ i, list.get(i) } );

Utilice las versiones parametrizadas de las instalaciones de registro para evitar la generación de toneladas de basura de concatenación de cadenas que GC deberá seguir. Object[] como arriba es barato, usualmente en la asignación de pila.

Con el manejo de excepciones, siempre registre los detalles completos de la excepción:

try { ...something that can throw an ignorable exception } catch( Exception ex ) { LOGGER.log( Level.SEVERE, ex.toString(), ex ); }

Siempre paso ex.toString() como mensaje aquí, porque entonces cuando " grep -n " ex.toString() como " Exception " en los archivos de registro, también puedo ver el mensaje. De lo contrario, estará en la siguiente línea de salida generada por el volcado de pila, y también debe tener un RegEx más avanzado que coincida con esa línea, lo que a menudo le brinda más salida de la que necesita.