Log en Aplicaciones Java y JavaEE

30
Diego Armando Gomez Mosquera logs

Transcript of Log en Aplicaciones Java y JavaEE

Page 1: Log en Aplicaciones Java y JavaEE

Diego Armando Gomez Mosquera

logs

Page 2: Log en Aplicaciones Java y JavaEE

Introducción

• El Log es un mensaje que le indica al desarrollador la ocurrencia de un evento que desea monitorear dentro de la aplicación.

• Típicamente usamos salidas estándar en consola.

– System.out.println(“”);

– Console.WriteLine(“”);

Page 3: Log en Aplicaciones Java y JavaEE

Introducción

• Nuestras aplicaciones quedan con mensajes de todo tipo dentro del código, mensajes que en la salida a producción de los productos en algunos casos deben ser borrados.

• El código desplegado en el servidor no habla?

• En el servidor no existe forma de depurar paso a paso?

Page 4: Log en Aplicaciones Java y JavaEE

Porque no seguir usando salidas estándar a consola?

• Consume recursos en el sistema operativo ya que las llamadas a System.out.println se agregan a un archivo Log que controla el servidor de aplicaciones.

• Es difícil encontrar un error dentro de toda la aplicación.

• En tiempo de ejecución al utilizar System.out.println no es posible configurar el nivel de granularidad de los mensajes.

Page 5: Log en Aplicaciones Java y JavaEE

Porque no seguir usando salidas estándar a consola?

• No se pueden deshabilitar los mensajes, ya que están en código duro.

• El manejo y control de mensajes en tiempo de ejecución es nulo.

• No es posible enviar los mensajes a otros sistemas diferentes de la consola ejemplo JMS, JDBC, SMTP, entre otros.

Page 6: Log en Aplicaciones Java y JavaEE

Implementaciones para el manejo de mensajes de Log.

• Log4J

– http://logging.apache.org/log4j

• LOGBack

– http://logback.qos.ch/

• slf4j

– http://www.slf4j.org/

• JavaTM Logging APIs – http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/

Page 7: Log en Aplicaciones Java y JavaEE

Log4J

• Primera versión creada en 1996 por Ceki Gülcü, Michael Steiner para el proyecto SEMPER.

• En el momento existen las siguientes versiones de log4J. – 1.2

– 2.0

Page 8: Log en Aplicaciones Java y JavaEE

Log4J

• Es uno de los framework mas populares del mundo Java para el manejo de logs.

• El proyecto creció tanto que hoy en día existen implementaciones para diferentes lenguajes de programación como: C, C++, C#, Perl, Python, Ruby y Eiffel.

Page 9: Log en Aplicaciones Java y JavaEE

Log4J componentes básicos.

• Maneja tres componentes básicos.

– Nivel de prioridad de traza.

– Appenders.

– Layouts.

– Configuración.

Page 10: Log en Aplicaciones Java y JavaEE

Log4J Nivel de prioridad de traza.

• DEBUG

• INFO

• WARN

• ERROR

• FATAL

• ALL

• OFF

Nivel básico

Nivel extra

Page 11: Log en Aplicaciones Java y JavaEE

Log4J Nivel de prioridad de traza.

• DEBUG

– Se utiliza para escribir mensajes de depuración, este log no debe estar activado cuando la aplicación se encuentre en producción.

Page 12: Log en Aplicaciones Java y JavaEE

Log4J Nivel de prioridad de traza.

• INFO

– Se utiliza para mensajes similares al modo "verbose" en otras aplicaciones.

Page 13: Log en Aplicaciones Java y JavaEE

Log4J Nivel de prioridad de traza.

• WARN

– Se utiliza para mensajes de alerta sobre eventos que se desea mantener constancia, pero que no afectan el correcto funcionamiento del programa.

Page 14: Log en Aplicaciones Java y JavaEE

Log4J Nivel de prioridad de traza.

• ERROR

– Se utiliza en mensajes de error de la aplicación que se desea guardar, estos eventos afectan al programa pero lo dejan seguir funcionando, como por ejemplo que algún parámetro de configuración no es correcto y se carga el parámetro por defecto.

Page 15: Log en Aplicaciones Java y JavaEE

Log4J Nivel de prioridad de traza.

• FATAL

– Se utiliza para mensajes críticos del sistema, generalmente luego de guardar el mensaje el programa abortará.

Page 16: Log en Aplicaciones Java y JavaEE

Log4J Nivel de prioridad de traza.

• ALL

– Este es el nivel más bajo posible, habilita todos los logs de la aplicación.

Page 17: Log en Aplicaciones Java y JavaEE

Log4J Nivel de prioridad de traza.

• OFF

– Este es el nivel más alto posible, deshabilita todos los logs.

Page 18: Log en Aplicaciones Java y JavaEE

Appenders

• Los Appenders son los destinos donde pueden ser enviados los mensajes.

• Log4J cuenta con diferentes Appenders pero es posible crear los propios.

• Dependiendo de la necesidad se pueden configurar los diferentes Appenders en tiempo de ejecucion.

Page 19: Log en Aplicaciones Java y JavaEE

Appenders

• Console • File • Rolling file • GUI • TCP/IP • NT Event log • Unix Syslog daemon • JDBC • SMTP • JMS

Page 20: Log en Aplicaciones Java y JavaEE

Layouts

• Son los responsables de dar el formato a los mensajes.

• Algunos permiten formatear en diferentes formatos HTML, XML, TXT, etc.

• Uno de los mas usados es el PatternLayout el cual es muy similar al funcionamiento del printf() en C o al Formatter de JSE5.

Page 21: Log en Aplicaciones Java y JavaEE

Layouts.

• DateLayout

• HTMLLayout

• PatternLayout

• SimpleLayout

• XMLLayout

Page 22: Log en Aplicaciones Java y JavaEE

Arquitectura de log4j

Page 23: Log en Aplicaciones Java y JavaEE

Configuración

• El API de log4j es totalmente configurable y se puede hacer con el uso de un archivo de propiedades o un archivo XML.

– log4j.properties

– log4j.xml

Page 24: Log en Aplicaciones Java y JavaEE

Configuración

• log4j.properties

################################################################ ### Configuración para LOCAL ### ################################################################ #log4j.rootCategory=DEBUG, LOGFILE, CONSOLE #log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender #log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender #log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout #log4j.appender.CONSOLE.layout.ConversionPattern=%-5p %c %x - %m%n ################################################################ ### Configuración para DESARROLLO, PREPRODUCCION, PRODUCCION ### ### Sólo nos interesa el nivel de ERROR ### ### No hay salida de consola ### ################################################################ log4j.rootCategory=ERROR, diario ################################################################ ### Configuración Común ### ################################################################ log4j.appender.LOGFILE=org.apache.log4j.DailyRollingFileAppender log4j.appender.LOGFILE.file=${catalina.base}/logs/aplicacion.log log4j.appender.LOGFILE.append=true log4j.appender.LOGFILE.DatePattern='.'yyyy-MM-dd log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c - %m%n

Page 25: Log en Aplicaciones Java y JavaEE

Configuración • log4j.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "dtds/org/apache/log4j/xml/log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%c] %-5p - %m%n" /> </layout> </appender> <appender name="file" class="org.apache.log4j.FileAppender"> <!-- name is the path and name of the log file. --> <param name="File" value="debug.log"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[Time: %d] [Thread: %t] [Level: %p]%m%n" /> </layout> </appender> <root> <level value="debuger"></level> <appender-ref ref="console"/> </root> </log4j:configuration>

Page 26: Log en Aplicaciones Java y JavaEE

Código con log4j

import org.apache.log4j.Logger; import org.apache.log4j.xml.DOMConfigurator; public class TestSimpleLayoutAndConsoleAppender { private static Logger logger; static{ DOMConfigurator.configure("TestSimpleLayoutAndConsoleAppender.xml"); logger = Logger.getLogger(TestSimpleLayoutAndConsoleAppender.class); } public static void main(String[] args) { logger.info("Incio el ejemplo de log4j"); logger.debug("Este es un mensaje de debug para saber que paso por aqui"); logger.error("Este es un error"); logger.fatal("Esto es fatal"); } }

Page 27: Log en Aplicaciones Java y JavaEE

Simple Logging Facade for Java (SLF4J)

• SLF4J proporciona una API de registro Java a través de un simple patrón de fachada.

• El framework de log se selecciona en tiempo de implementación y puede ser java.util.logging , log4j, logback o tinylog

Page 28: Log en Aplicaciones Java y JavaEE

Arquitectura slf4j

Page 29: Log en Aplicaciones Java y JavaEE

Código slf4j + log4j

import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestSimpleLayoutAndConsoleAppender { private static Logger logger=LoggerFactory.getLogger(TestSimpleLayoutAndConsoleAppender.class); public static void main(String[] args) { logger.info("Incio el ejemplo de slf4j + log4j "); logger.debug("Este es un mensaje de debug para saber que paso por aqui"); logger.error("Este es un error"); logger.warn("Este es un warn"); logger.trace("Este es un trace"); } }

Page 30: Log en Aplicaciones Java y JavaEE