SlideShare una empresa de Scribd logo
1 de 59
Monitorización de aplicaciones        1.2.15 Licensed under Creative Commons Attribution 3 Emmerson Miranda   SCJP 1.5 SCWCD  J2EE 1.5 Blog : http://emmersonmiranda.blogspot.com/
Guión PARTE TEÓRICA Introducción  System.out.println vista global Características Componentes Diagrama Prioridades Appenders Loggers Layouts Configuración e Inicialización Optimización Monitor de mensajes
Log4j 1.2.15 Parte teórica Emmerson Miranda   SCJP 1.5 SCWCD  J2EE 1.5 Blog : http://emmersonmiranda.blogspot.com/
1.- Introducción
Introducción Siempre que se desarrolla una aplicación es necesario monitorizar su comportamiento a fin de ver o detectar sus posibles anomalías. Normalmente las monitorizaciones se suelen hacer desde una consola del servidor web o desde un archivo de log. Durante una temporada para realizar estas tareas se hacia utilizando el comando system.out.println
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.  Al utilizar System.out.println no estamos granulando la aplicación para la depuración.  No se puede deshabilitar los mensajes system.out.println - ¿Por qué no?
Log4J es un componente que nos permite hacer trazas de nuestras aplicaciones. Se configura fácilmente mediante un fichero de configuración llamado:  log4j.properties ó Log4j.xml A nivel de código es muy poco intrusivo. Introducción
Commons loggingde Apache JSR47  (comparativa con log4j) Sun Logging API SLF4J Log4net (versión para .Net) Enterprise Library Application Blocks (Loggingapplication block) para .Net Otros frameworks de logging
2.- Características
Diferentes niveles de traza por prioridad.  Filtros según categoría.  Redirección de las trazas a diferentes destinos A ficheros A consola A Base de datos Colas JMS, etc.  Formatos de visualización personalizados.  Configuración por ficheros. Características
Permite activar o desactivar las trazas en tiempo de ejecución, sin modificar código fuente. Tiene herencia entre loggers Se puede utilizar en diferentes tipos de aplicaciones Web Escritorio Soporta múltiples plataformas (Java, .Net) Configurable en tiempo de ejecución Características
3.- Componentes
Componentes Nivel / Prioridad Aplicación Logger Appender 1..* Filter Layout
Log4j tiene tres componentes principales :  loggers  appenders layouts .  Estos tres funcionan juntos para habilitar a los programadores sacar mensajes de log, de acuerdo al tipo de mensaje y al nivel, y controlar en tiempo de ejecución cómo estos mensajes son formateados y donde salen. Componentes
Cada mensaje que se escribe se hace con un nivel de prioridad. Cuando se escriben trazas en nuestras aplicaciones, normalmente se hacen en diferentes partes del código y con diferentes niveles de prioridad. De acuerdo al nivel de prioridad establecido para el mensaje y al nivel configurado en el fichero de configuración, estos mensajes se podrán mostrar o no. El nivel de prioridad por defecto es INFO, lo cual quiere decir que todos los mensajes escritos con esta se mostrarán automáticamente Prioridades
Niveles / Prioridades FATAL: Muestra los mensajes de situaciones que probablemente harán abortar la aplicación.  ERROR: Muestra los mensajes de errores que no son deseados pero que no interrumpirán la aplicación.  WARN: Muestra los mensajes de contextos peligrosos para la aplicación, o ciertas operaciones de uso no recomendado.  INFO: Muestra los mensajes de información sobre la ejecución de la aplicación, o sus eventos importantes. DEBUG: Muestra los mensajes para depurar la aplicación. (Utilizado en tiempo de desarrollo)  ALL: Muestra todos los mensajes OFF: Desactiva todos los mensajes.
Matriz de prioridades
Una de las características que hace grande a Log4J es su capacidad para poder escribir mensajes en distintos tipos de destinos como por ejemplo: La consola Ficheros Sockets Eventos de Windows Unix Syslog JMS y otros. También se pueden implementar Appenders propios implementando  la interfaz  Appender para crear nuestros propios sistemas de registro de mensajes. Appenders
Cada petición de logging para un logger dado será enviada a todos los appenders de ese logger así como a los appenders más altos en la jerarquía. Es decir , los appender son heredados aditivamente desde la jerarquía de loggers. Es posible cambiar este comportamiento por defecto estableciendo la propiedad “additivity” a false. Aditividad de los Appenders
Por ejemplo: La salida de una sentencia de logger C irá a los appenders de C y a los de sus antecesores. Sin embargo , si un antecesor de logger C, digamos P , tiene la additivityflag a falso , entonces la salida de C será dirigida a los appenders de C y a los de sus antecesores hasta llegar a P incluido , pero no ira a los antecesores de P. Los loggers tienen el additivityflag puesto a true por defecto. Reglas de aditividad
Appenders
Appenders
Appenders
Ejemplo: Configuración de Appenders <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">     <layout class="org.apache.log4j.SimpleLayout"/> </appender> <appender name="FichHibernate" class="org.apache.log4j.DailyRollingFileAppender">     <param name="File" value="c://HibernateTraining.log" />     <param name="DatePattern" value="'.'yyyy-MM-dd" />     <layout class="org.apache.log4j.PatternLayout">        <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n" />     </layout> </appender> <appender name="file" class="org.apache.log4j.FileAppender">     <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>
Son el núcleo principal del proceso de registro de mensajes. Sus distintos tipos de niveles han sido tratados en el apartado de prioridades. Loggers
El espacio de todas las posibles sentencias de log esta categorizado según a algún criterio elegido por el programador.  Esto nos lleva a elegir categoría como el concepto central del paquete. Sin embargo desde el log4j 1.2 , la clase Logger ha reemplazado a la clase Category. Por lo tanto a partir de ahí hablamos de Loggers. Los Loggers son entidades con nombre .  Los nombres de los Loggers son sensibles a la mayúsculas y siguen la siguiente regla de nombrado: Loggers
Un logger se dice que es un antecesor de otro logger si su nombre seguido por un punto es un prefijo dentro del nombre del otro logger. Por ejemplo  ,el logger llamado “com.foo” es un padre del logger llamado “com.foo.bar”. De forma similar , “java” es un padre de “java.util” y el antecesor de “java.util.Vector”.  El logger root reside en el top de la jerarquía de loggers. Es excepcional en dos cosas: Siempre existe  No puede ser recuperado por nombre.  Loggers
Los loggers solo muestran mensajes que son más grandes o igual a su prioridad. Si la prioridad de registro de un logger no esta especificado en el fichero de configuración, este lo hereda de su logger inmediatamente superior (padre) y así sucesivamente hasta heredar del "root logger". Así que si un logger es creado por ejemplo para el paquete com.foo.bar no tiene un nivel configurado, entonces heredará el nivel configurado para el paquete com.foo Loggers
Logger logger = Logger.getRootLogger(); La práctica más habitual para instanciar un logger es declararlo como estático asociado  a la clase de la cual queremos hacer las trazas. privatestatic  Logger   log  =  Logger.getLogger(NuestraClase.class); Para establecer la prioridad de un logger se lo puede hacer mediante el fichero de configuración o con la siguiente línea de código: logger.setLevel((Level)Level.WARN); Obtener un logger por código
Logger log = Logger.getRootLogger(); log.debug(mensaje) .- Escribe el mensaje cuando el nivel de traza mínimo especificado es DEBUG. log.error(mensaje).- parecido a lo anterior. log.fatal(mensaje).- parecido a lo anterior. log.info(mensaje).- parecido a lo anterior. log.warn(mensaje).- parecido a lo anterior. Impresión de trazas
Loggers
Ejemplo: Configuración de loggers <root>          <priority value ="debug" />          <appender-ref ref="console" />  </root> <logger name=“edu.training.hibernate.domain.MyClass">          <levelvalue="info"/>          <appender-refref=" ConsoleAppender" /> </logger> <logger name=“edu.training.hibernate" additivity="false">          <levelvalue=“debug" />          <appender-refref=" FichHibernate" />  </logger> <logger name=“edu.training" additivity="false">          <levelvalue=“ALL" />          <appender-refref=“file" />  </logger>
Todo Appender necesita tener asociado un Layout (formato de salida de los  mensajes) Layouts
Layouts
Formatea la salida de los mensajes según el patrón de conversión especificado en una cadena de texto. El patrón de conversión esta compuesto por literales de texto(cualquier literal) y  expresiones de formato llamadas "Conversionspecifiers“ Cada especificación de conversión empieza con el carácter "%" seguidos opcionalmente de modificadores de formato y conversión de caracteres PatternLayout Por ejemplo, definido un patrón de conversión: "%-5p [%t]: %m%n"                         (en el fichero de configuración) Escritura de la traza en código JAVA Logger log = Logger.getLogger(MiClase.class); log.debug("Message 1"); log.warn("Message 2"); Salida formateada según el patrón especificado DEBUG [main]: Message 1 WARN  [main]: Message 2
4.- Configuración e inicialización
El entorno log4j es completamente configurable programáticamente  Sin embargo , es mucho más flexible configurar log4j usando archivos de configuración Log4J se puede configurar mediante dos tipos de ficheros Fichero de propiedades.- log4j.properties Fichero XML .- log4j.xml Configuración
Los ficheros de configuración de propiedades son mucho mas complicados de entender y no tienen un orden claro. Las configuraciones XML son más fáciles de entender por diferentes programadores, además que es más sencillo darle mantenimiento al archivo XML. Log4j.properties
Ejemplo: Log4j.properties # initialise root logger with level DEBUG and call it BLAH log4j.rootLogger=DEBUG, BLAH # add a ConsoleAppender to the logger BLAH log4j.appender.BLAH=org.apache.log4j.ConsoleAppender # set set that layout to be SimpleLayout log4j.appender.BLAH.layout=org.apache.log4j.SimpleLayout
Su estructura viene definida en el fichero descriptivo log4j.dtd Se suele colocar en un directorio accesible para la aplicación. Normalmente en caso de las aplicaciones web  dentro de la carpeta  WEB-INF/classes En algunas versiones de Tomcat hay que especificarlo en los scripts de arranque. CATALINA_OPTS="-Dlog4j.configuration=log4j.xml“ http://wiki.apache.org/logging-log4j/Log4jXmlFormat Log4j.xml
Ejemplo: Log4j.xml <?xmlversion="1.0" encoding="UTF-8" ?>  <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">  <appendername="console" class="org.apache.log4j.ConsoleAppender">          <paramname="Target" value="System.out"/>           <layoutclass="org.apache.log4j.PatternLayout">                     <paramname="ConversionPattern" value="%-5p %c{1} - %m%n"/>           </layout>  </appender>  <root>           <priorityvalue ="debug" />           <appender-refref="console" />  </root>  </log4j:configuration>
Log4J se suele inicializar con la siguiente linea: DOMConfigurator.configure("log4j.xml") PropertyConfigurator.configure("log4j.lcf") Para las aplicaciones web la línea de código anterior suele estar dentro de un servlet que se inicializa al cargar la aplicación. Normalmente el nombre del fichero que contiene la configuración se encuentra como un parámetro de dicho servlet. Inicialización
Ejemplo: Inicialización servlet  <servlet>     <servlet-name>log4j-init</servlet-name>     <servlet-class>edu.training.jee.Log4jInit</servlet-class>     <init-param>       <param-name>log4j-init-file</param-name>       <param-value>WEB-INF/classes/log4j.xml</param-value>     </init-param>     <load-on-startup>1</load-on-startup>   </servlet>
Ejemplo: Inicialización servlet package edu.training.jee; import ...; ... public class Log4jInit extends HttpServlet {   public void init() {   String prefix =  getServletContext().getRealPath("/");   String file = getInitParameter("log4j-init-file");    if(file != null) {   //PropertyConfigurator.configure(prefix+file); DOMConfigurator.configure(prefix+file);   }  } … }
5.- Optimización
Un apartado importante en el uso de las trazas es como utilizarlas cuando se producen errores/excepciones. No siempre hay que escribir las trazas de excepciones a nivel de error, ya que en algunos casos no interesa que se visualicen. En caso de escribir componentes que posteriormente utilicen otras personas, convendrá relanzar la excepción y escribir la traza a nivel de DEBUG o INFO dependiendo de si el programador será el propio usuario de la clase o si un tercero quien la utilice. Se recomienda que en los proyecto no debe estar la configuración de root sino más bien la configuración de un o unos paquetes en especial. Optimización
Cuando los logs son apagados el coste de los registros se limita únicamente a la invocación del método. No esta demás decir que la invocación del método esconde el coste de la construcción del parámetro (mensaje). Operador + StringBuilder Desactivar las trazas
Se deben evitar lineas de código como por ejemplo: logger.debug("Entrynumber: " + i + " is " + String.valueOf(entry[i])); Para evitar los costos de la construcción de los parámetros es recomendable verificar si el nivel esta activado. Desactivar las trazas if(logger.isDebugEnabled() ){ logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i])); }
Los layouts internamente al formatear el texto también involucran penalizaciones. Una de las formas mas sencillas y rápidas  incluso que el System.out.println es utilizar  el SimpleLayout. El coste de los layouts
Dado que los appenders escriben en toda su jerarquía por defecto, supone tantos costes de más, como layouts y destinos de escritura tenga; por eso es recomendable desactivar la aditividad. Aditividad de los appenders
Chainsaw 6.- Monitor de mensajes
Log4J trae consigo un monitor de mensajes denominado chainsaw, hecho con Java, el cual permite ver el contenido de aquellos ficheros de log en formato XML. Viene dentro log4j-1.2.xx.jar y se puede ejecutar desde línea de comandos java -classpath log4j-1.2.15.jar org.apache.log4j.chainsaw.Main También esta disponible desde el Java Web Start http://logging.apache.org/chainsaw/download.html Chainsaw
Chainsaw  <appendername="FILE" class="org.apache.log4j.RollingFileAppender">      <errorHandlerclass="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>      <paramname="File" value="HolaMundoHibernate.log"/>      <param name="Threshold" value="DEBUG"/>      <param name="Append" value="false"/>      <param name="MaxFileSize" value="5000KB"/>      <param name="MaxBackupIndex" value="50"/>      <layoutclass="org.apache.log4j.xml.XMLLayout" />     </appender> <logger name="org.hibernate.loader">        <levelvalue="DEBUG"/>        <appender-refref="FILE"/> </logger>
Chainsaw incorporado en log4j.1.2.15.jar
Chainsaw desde el Java Web Start
NO! Una técnica consiste siempre en re direccionar a un fichero de texto, y luego este se puede inspeccionar con herramientas como: tail.- en linux Cualquier editor de texto, como por ejemplo vi, ultraedit, notepad++ … La otra  mandar los mensajes a bases de datos, para luego explotar la información con otras herramientas especializadas. Chainsaw, ¿el único?
           Conclusiones
Conclusiones Usando la jerarquía de los loggers se pueden controlar granular mente que mensajes deseamos mostrar. Ayuda a reducir el volumen de mensajes registrados. Log4J ofrece distintos tipos de configuración pudiendo registrar los mensajes en distintos tipos de fuentes de manera transparente sin tener que recompilar nuestro código. Ayuda a mejorar el rendimiento y el seguimiento de errores de las aplicaciones.
- FIN - Licensed under Creative Commons Attribution 3 Emmerson Miranda   SCJP 1.5 SCWCD  J2EE 1.5 Blog : http://emmersonmiranda.blogspot.com/

Más contenido relacionado

La actualidad más candente

Manual Instalación JLex & CUP
Manual Instalación JLex & CUPManual Instalación JLex & CUP
Manual Instalación JLex & CUPrubeniii
 
Introduccion al assembler
Introduccion al assemblerIntroduccion al assembler
Introduccion al assemblerangel
 
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...Diego Paúl Cuenca Quezada
 
Tutorial de prolog
Tutorial de prologTutorial de prolog
Tutorial de prologIvan
 
Unidad3 130504222102-phpapp02
Unidad3 130504222102-phpapp02Unidad3 130504222102-phpapp02
Unidad3 130504222102-phpapp02Lesly Gonzalez
 
Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)
Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)
Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)Maztherprozh
 
Curso De IniciacióN Al Lenguaje C
Curso De IniciacióN Al Lenguaje CCurso De IniciacióN Al Lenguaje C
Curso De IniciacióN Al Lenguaje Cguestbc0748
 
Equipo 6 comparaciones
Equipo 6 comparacionesEquipo 6 comparaciones
Equipo 6 comparacionesgabo
 
Presentacion de la_estructura_de_c++
Presentacion de la_estructura_de_c++Presentacion de la_estructura_de_c++
Presentacion de la_estructura_de_c++MartinCetis109
 

La actualidad más candente (15)

Manual Instalación JLex & CUP
Manual Instalación JLex & CUPManual Instalación JLex & CUP
Manual Instalación JLex & CUP
 
NASM
NASM NASM
NASM
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Introduccion al assembler
Introduccion al assemblerIntroduccion al assembler
Introduccion al assembler
 
Armando cevallos.doc
Armando cevallos.docArmando cevallos.doc
Armando cevallos.doc
 
UNIDAD 2 PROGRAMACIÓN BASICA
UNIDAD 2 PROGRAMACIÓN BASICAUNIDAD 2 PROGRAMACIÓN BASICA
UNIDAD 2 PROGRAMACIÓN BASICA
 
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
 
Tutorial de prolog
Tutorial de prologTutorial de prolog
Tutorial de prolog
 
Unidad3 130504222102-phpapp02
Unidad3 130504222102-phpapp02Unidad3 130504222102-phpapp02
Unidad3 130504222102-phpapp02
 
2 poo u1 1 Introduccion
2 poo u1 1 Introduccion2 poo u1 1 Introduccion
2 poo u1 1 Introduccion
 
Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)
Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)
Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)
 
Curso De IniciacióN Al Lenguaje C
Curso De IniciacióN Al Lenguaje CCurso De IniciacióN Al Lenguaje C
Curso De IniciacióN Al Lenguaje C
 
Estructura básica para C++
Estructura básica para C++Estructura básica para C++
Estructura básica para C++
 
Equipo 6 comparaciones
Equipo 6 comparacionesEquipo 6 comparaciones
Equipo 6 comparaciones
 
Presentacion de la_estructura_de_c++
Presentacion de la_estructura_de_c++Presentacion de la_estructura_de_c++
Presentacion de la_estructura_de_c++
 

Destacado

Manual struts2-espanol
Manual struts2-espanolManual struts2-espanol
Manual struts2-espanolGuiro Lin
 
WSO2 API Manager - Accessing SOAP Service
WSO2 API Manager -  Accessing SOAP ServiceWSO2 API Manager -  Accessing SOAP Service
WSO2 API Manager - Accessing SOAP ServiceEmmerson Miranda
 
Hibernate 3.2 short manual
Hibernate 3.2 short manualHibernate 3.2 short manual
Hibernate 3.2 short manualEmmerson Miranda
 
Persistencia de objetos con Hibernate
Persistencia de objetos con HibernatePersistencia de objetos con Hibernate
Persistencia de objetos con HibernateMauro Gomez Mejia
 

Destacado (6)

Log4 J
Log4 JLog4 J
Log4 J
 
Manual struts2-espanol
Manual struts2-espanolManual struts2-espanol
Manual struts2-espanol
 
JEE 5 - EJB3
JEE 5 - EJB3JEE 5 - EJB3
JEE 5 - EJB3
 
WSO2 API Manager - Accessing SOAP Service
WSO2 API Manager -  Accessing SOAP ServiceWSO2 API Manager -  Accessing SOAP Service
WSO2 API Manager - Accessing SOAP Service
 
Hibernate 3.2 short manual
Hibernate 3.2 short manualHibernate 3.2 short manual
Hibernate 3.2 short manual
 
Persistencia de objetos con Hibernate
Persistencia de objetos con HibernatePersistencia de objetos con Hibernate
Persistencia de objetos con Hibernate
 

Similar a Monitorización de aplicaciones con Log4j

Presentación de logs
Presentación de logsPresentación de logs
Presentación de logsMatías Leal
 
Log en Aplicaciones Java y JavaEE
Log en Aplicaciones Java y JavaEELog en Aplicaciones Java y JavaEE
Log en Aplicaciones Java y JavaEEVortexbird
 
Framework .NET 3.5 09 Depuración, monitorización y pruebas
Framework .NET 3.5 09 Depuración, monitorización y pruebasFramework .NET 3.5 09 Depuración, monitorización y pruebas
Framework .NET 3.5 09 Depuración, monitorización y pruebasAntonio Palomares Sender
 
Fundamentos de Java / 15 consejos prácticos sobre Java que cambiarán la for...
Fundamentos de Java /   15 consejos prácticos sobre Java que cambiarán la for...Fundamentos de Java /   15 consejos prácticos sobre Java que cambiarán la for...
Fundamentos de Java / 15 consejos prácticos sobre Java que cambiarán la for...Eudris Cabrera
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc X
 
Terceraunidad 130504124039-phpapp02
Terceraunidad 130504124039-phpapp02Terceraunidad 130504124039-phpapp02
Terceraunidad 130504124039-phpapp02Maryfer' Ortega
 
3 ponerapuntoelprogramamedianteelusodeuneditordelenguajedeprogramacinestructu...
3 ponerapuntoelprogramamedianteelusodeuneditordelenguajedeprogramacinestructu...3 ponerapuntoelprogramamedianteelusodeuneditordelenguajedeprogramacinestructu...
3 ponerapuntoelprogramamedianteelusodeuneditordelenguajedeprogramacinestructu...Kareen's Maldonado
 
3. poner a punto el programa mediante el uso de un editor de lenguaje de prog...
3. poner a punto el programa mediante el uso de un editor de lenguaje de prog...3. poner a punto el programa mediante el uso de un editor de lenguaje de prog...
3. poner a punto el programa mediante el uso de un editor de lenguaje de prog...carolina peña
 
3 unidad.Poner a punto el programa mediante el uso de un editor de lenguaje d...
3 unidad.Poner a punto el programa mediante el uso de un editor de lenguaje d...3 unidad.Poner a punto el programa mediante el uso de un editor de lenguaje d...
3 unidad.Poner a punto el programa mediante el uso de un editor de lenguaje d...Domitho Ibarra
 

Similar a Monitorización de aplicaciones con Log4j (20)

Log4J
Log4JLog4J
Log4J
 
Unidad ad 3
Unidad ad 3Unidad ad 3
Unidad ad 3
 
Presentación de logs
Presentación de logsPresentación de logs
Presentación de logs
 
Log en Aplicaciones Java y JavaEE
Log en Aplicaciones Java y JavaEELog en Aplicaciones Java y JavaEE
Log en Aplicaciones Java y JavaEE
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Tercera unidad
Tercera unidadTercera unidad
Tercera unidad
 
Introduccion al assembler
Introduccion al assemblerIntroduccion al assembler
Introduccion al assembler
 
Introduccion al assembler[1]
Introduccion al assembler[1]Introduccion al assembler[1]
Introduccion al assembler[1]
 
Framework .NET 3.5 09 Depuración, monitorización y pruebas
Framework .NET 3.5 09 Depuración, monitorización y pruebasFramework .NET 3.5 09 Depuración, monitorización y pruebas
Framework .NET 3.5 09 Depuración, monitorización y pruebas
 
Mipag web
Mipag webMipag web
Mipag web
 
Fundamentos de Java / 15 consejos prácticos sobre Java que cambiarán la for...
Fundamentos de Java /   15 consejos prácticos sobre Java que cambiarán la for...Fundamentos de Java /   15 consejos prácticos sobre Java que cambiarán la for...
Fundamentos de Java / 15 consejos prácticos sobre Java que cambiarán la for...
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzado
 
Terceraunidad 130504124039-phpapp02
Terceraunidad 130504124039-phpapp02Terceraunidad 130504124039-phpapp02
Terceraunidad 130504124039-phpapp02
 
3 ponerapuntoelprogramamedianteelusodeuneditordelenguajedeprogramacinestructu...
3 ponerapuntoelprogramamedianteelusodeuneditordelenguajedeprogramacinestructu...3 ponerapuntoelprogramamedianteelusodeuneditordelenguajedeprogramacinestructu...
3 ponerapuntoelprogramamedianteelusodeuneditordelenguajedeprogramacinestructu...
 
3. poner a punto el programa mediante el uso de un editor de lenguaje de prog...
3. poner a punto el programa mediante el uso de un editor de lenguaje de prog...3. poner a punto el programa mediante el uso de un editor de lenguaje de prog...
3. poner a punto el programa mediante el uso de un editor de lenguaje de prog...
 
3 unidad.Poner a punto el programa mediante el uso de un editor de lenguaje d...
3 unidad.Poner a punto el programa mediante el uso de un editor de lenguaje d...3 unidad.Poner a punto el programa mediante el uso de un editor de lenguaje d...
3 unidad.Poner a punto el programa mediante el uso de un editor de lenguaje d...
 
Tercera unidad ;3
Tercera unidad ;3Tercera unidad ;3
Tercera unidad ;3
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 

Más de Emmerson Miranda

WSO2 DSS - Calling stored procedures with cursors
WSO2 DSS - Calling stored procedures with cursorsWSO2 DSS - Calling stored procedures with cursors
WSO2 DSS - Calling stored procedures with cursorsEmmerson Miranda
 
WSO2 DSS - Create a Data service
WSO2 DSS - Create a Data serviceWSO2 DSS - Create a Data service
WSO2 DSS - Create a Data serviceEmmerson Miranda
 
WSO2 ESB - Acceso a base de datos
WSO2 ESB - Acceso a base de datosWSO2 ESB - Acceso a base de datos
WSO2 ESB - Acceso a base de datosEmmerson Miranda
 
Prototipado de pantallas para toma de requisitos
Prototipado de pantallas para toma de requisitosPrototipado de pantallas para toma de requisitos
Prototipado de pantallas para toma de requisitosEmmerson Miranda
 
Modelado de aplicaciones en UML con EA
Modelado de aplicaciones en UML con EAModelado de aplicaciones en UML con EA
Modelado de aplicaciones en UML con EAEmmerson Miranda
 
Arquitectura Mashup Con SilverLight 2
Arquitectura Mashup Con SilverLight 2Arquitectura Mashup Con SilverLight 2
Arquitectura Mashup Con SilverLight 2Emmerson Miranda
 

Más de Emmerson Miranda (11)

WSO2 DSS - JENKINS
WSO2 DSS - JENKINSWSO2 DSS - JENKINS
WSO2 DSS - JENKINS
 
WSO2 DSS - Calling stored procedures with cursors
WSO2 DSS - Calling stored procedures with cursorsWSO2 DSS - Calling stored procedures with cursors
WSO2 DSS - Calling stored procedures with cursors
 
WSO2 DSS - Create a Data service
WSO2 DSS - Create a Data serviceWSO2 DSS - Create a Data service
WSO2 DSS - Create a Data service
 
WSO2 ESB - Acceso a base de datos
WSO2 ESB - Acceso a base de datosWSO2 ESB - Acceso a base de datos
WSO2 ESB - Acceso a base de datos
 
WS02 ESB Service Chaining
WS02 ESB Service ChainingWS02 ESB Service Chaining
WS02 ESB Service Chaining
 
WSO2 REST API Example
WSO2 REST API ExampleWSO2 REST API Example
WSO2 REST API Example
 
WSO2 Transformer Proxy
WSO2 Transformer ProxyWSO2 Transformer Proxy
WSO2 Transformer Proxy
 
Prototipado de pantallas para toma de requisitos
Prototipado de pantallas para toma de requisitosPrototipado de pantallas para toma de requisitos
Prototipado de pantallas para toma de requisitos
 
Json short manual
Json short manualJson short manual
Json short manual
 
Modelado de aplicaciones en UML con EA
Modelado de aplicaciones en UML con EAModelado de aplicaciones en UML con EA
Modelado de aplicaciones en UML con EA
 
Arquitectura Mashup Con SilverLight 2
Arquitectura Mashup Con SilverLight 2Arquitectura Mashup Con SilverLight 2
Arquitectura Mashup Con SilverLight 2
 

Último

Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 

Último (20)

Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 

Monitorización de aplicaciones con Log4j

  • 1. Monitorización de aplicaciones 1.2.15 Licensed under Creative Commons Attribution 3 Emmerson Miranda SCJP 1.5 SCWCD J2EE 1.5 Blog : http://emmersonmiranda.blogspot.com/
  • 2. Guión PARTE TEÓRICA Introducción System.out.println vista global Características Componentes Diagrama Prioridades Appenders Loggers Layouts Configuración e Inicialización Optimización Monitor de mensajes
  • 3. Log4j 1.2.15 Parte teórica Emmerson Miranda SCJP 1.5 SCWCD J2EE 1.5 Blog : http://emmersonmiranda.blogspot.com/
  • 5. Introducción Siempre que se desarrolla una aplicación es necesario monitorizar su comportamiento a fin de ver o detectar sus posibles anomalías. Normalmente las monitorizaciones se suelen hacer desde una consola del servidor web o desde un archivo de log. Durante una temporada para realizar estas tareas se hacia utilizando el comando system.out.println
  • 6. 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. Al utilizar System.out.println no estamos granulando la aplicación para la depuración. No se puede deshabilitar los mensajes system.out.println - ¿Por qué no?
  • 7. Log4J es un componente que nos permite hacer trazas de nuestras aplicaciones. Se configura fácilmente mediante un fichero de configuración llamado: log4j.properties ó Log4j.xml A nivel de código es muy poco intrusivo. Introducción
  • 8. Commons loggingde Apache JSR47 (comparativa con log4j) Sun Logging API SLF4J Log4net (versión para .Net) Enterprise Library Application Blocks (Loggingapplication block) para .Net Otros frameworks de logging
  • 10. Diferentes niveles de traza por prioridad. Filtros según categoría. Redirección de las trazas a diferentes destinos A ficheros A consola A Base de datos Colas JMS, etc. Formatos de visualización personalizados. Configuración por ficheros. Características
  • 11. Permite activar o desactivar las trazas en tiempo de ejecución, sin modificar código fuente. Tiene herencia entre loggers Se puede utilizar en diferentes tipos de aplicaciones Web Escritorio Soporta múltiples plataformas (Java, .Net) Configurable en tiempo de ejecución Características
  • 13. Componentes Nivel / Prioridad Aplicación Logger Appender 1..* Filter Layout
  • 14. Log4j tiene tres componentes principales : loggers appenders layouts . Estos tres funcionan juntos para habilitar a los programadores sacar mensajes de log, de acuerdo al tipo de mensaje y al nivel, y controlar en tiempo de ejecución cómo estos mensajes son formateados y donde salen. Componentes
  • 15. Cada mensaje que se escribe se hace con un nivel de prioridad. Cuando se escriben trazas en nuestras aplicaciones, normalmente se hacen en diferentes partes del código y con diferentes niveles de prioridad. De acuerdo al nivel de prioridad establecido para el mensaje y al nivel configurado en el fichero de configuración, estos mensajes se podrán mostrar o no. El nivel de prioridad por defecto es INFO, lo cual quiere decir que todos los mensajes escritos con esta se mostrarán automáticamente Prioridades
  • 16. Niveles / Prioridades FATAL: Muestra los mensajes de situaciones que probablemente harán abortar la aplicación. ERROR: Muestra los mensajes de errores que no son deseados pero que no interrumpirán la aplicación. WARN: Muestra los mensajes de contextos peligrosos para la aplicación, o ciertas operaciones de uso no recomendado. INFO: Muestra los mensajes de información sobre la ejecución de la aplicación, o sus eventos importantes. DEBUG: Muestra los mensajes para depurar la aplicación. (Utilizado en tiempo de desarrollo) ALL: Muestra todos los mensajes OFF: Desactiva todos los mensajes.
  • 18. Una de las características que hace grande a Log4J es su capacidad para poder escribir mensajes en distintos tipos de destinos como por ejemplo: La consola Ficheros Sockets Eventos de Windows Unix Syslog JMS y otros. También se pueden implementar Appenders propios implementando la interfaz Appender para crear nuestros propios sistemas de registro de mensajes. Appenders
  • 19. Cada petición de logging para un logger dado será enviada a todos los appenders de ese logger así como a los appenders más altos en la jerarquía. Es decir , los appender son heredados aditivamente desde la jerarquía de loggers. Es posible cambiar este comportamiento por defecto estableciendo la propiedad “additivity” a false. Aditividad de los Appenders
  • 20. Por ejemplo: La salida de una sentencia de logger C irá a los appenders de C y a los de sus antecesores. Sin embargo , si un antecesor de logger C, digamos P , tiene la additivityflag a falso , entonces la salida de C será dirigida a los appenders de C y a los de sus antecesores hasta llegar a P incluido , pero no ira a los antecesores de P. Los loggers tienen el additivityflag puesto a true por defecto. Reglas de aditividad
  • 24. Ejemplo: Configuración de Appenders <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.SimpleLayout"/> </appender> <appender name="FichHibernate" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="c://HibernateTraining.log" /> <param name="DatePattern" value="'.'yyyy-MM-dd" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n" /> </layout> </appender> <appender name="file" class="org.apache.log4j.FileAppender"> <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>
  • 25. Son el núcleo principal del proceso de registro de mensajes. Sus distintos tipos de niveles han sido tratados en el apartado de prioridades. Loggers
  • 26. El espacio de todas las posibles sentencias de log esta categorizado según a algún criterio elegido por el programador. Esto nos lleva a elegir categoría como el concepto central del paquete. Sin embargo desde el log4j 1.2 , la clase Logger ha reemplazado a la clase Category. Por lo tanto a partir de ahí hablamos de Loggers. Los Loggers son entidades con nombre . Los nombres de los Loggers son sensibles a la mayúsculas y siguen la siguiente regla de nombrado: Loggers
  • 27. Un logger se dice que es un antecesor de otro logger si su nombre seguido por un punto es un prefijo dentro del nombre del otro logger. Por ejemplo ,el logger llamado “com.foo” es un padre del logger llamado “com.foo.bar”. De forma similar , “java” es un padre de “java.util” y el antecesor de “java.util.Vector”. El logger root reside en el top de la jerarquía de loggers. Es excepcional en dos cosas: Siempre existe No puede ser recuperado por nombre. Loggers
  • 28. Los loggers solo muestran mensajes que son más grandes o igual a su prioridad. Si la prioridad de registro de un logger no esta especificado en el fichero de configuración, este lo hereda de su logger inmediatamente superior (padre) y así sucesivamente hasta heredar del "root logger". Así que si un logger es creado por ejemplo para el paquete com.foo.bar no tiene un nivel configurado, entonces heredará el nivel configurado para el paquete com.foo Loggers
  • 29. Logger logger = Logger.getRootLogger(); La práctica más habitual para instanciar un logger es declararlo como estático asociado a la clase de la cual queremos hacer las trazas. privatestatic Logger log = Logger.getLogger(NuestraClase.class); Para establecer la prioridad de un logger se lo puede hacer mediante el fichero de configuración o con la siguiente línea de código: logger.setLevel((Level)Level.WARN); Obtener un logger por código
  • 30. Logger log = Logger.getRootLogger(); log.debug(mensaje) .- Escribe el mensaje cuando el nivel de traza mínimo especificado es DEBUG. log.error(mensaje).- parecido a lo anterior. log.fatal(mensaje).- parecido a lo anterior. log.info(mensaje).- parecido a lo anterior. log.warn(mensaje).- parecido a lo anterior. Impresión de trazas
  • 32. Ejemplo: Configuración de loggers <root> <priority value ="debug" /> <appender-ref ref="console" /> </root> <logger name=“edu.training.hibernate.domain.MyClass"> <levelvalue="info"/> <appender-refref=" ConsoleAppender" /> </logger> <logger name=“edu.training.hibernate" additivity="false"> <levelvalue=“debug" /> <appender-refref=" FichHibernate" /> </logger> <logger name=“edu.training" additivity="false"> <levelvalue=“ALL" /> <appender-refref=“file" /> </logger>
  • 33. Todo Appender necesita tener asociado un Layout (formato de salida de los mensajes) Layouts
  • 35. Formatea la salida de los mensajes según el patrón de conversión especificado en una cadena de texto. El patrón de conversión esta compuesto por literales de texto(cualquier literal) y expresiones de formato llamadas "Conversionspecifiers“ Cada especificación de conversión empieza con el carácter "%" seguidos opcionalmente de modificadores de formato y conversión de caracteres PatternLayout Por ejemplo, definido un patrón de conversión: "%-5p [%t]: %m%n" (en el fichero de configuración) Escritura de la traza en código JAVA Logger log = Logger.getLogger(MiClase.class); log.debug("Message 1"); log.warn("Message 2"); Salida formateada según el patrón especificado DEBUG [main]: Message 1 WARN [main]: Message 2
  • 36. 4.- Configuración e inicialización
  • 37. El entorno log4j es completamente configurable programáticamente Sin embargo , es mucho más flexible configurar log4j usando archivos de configuración Log4J se puede configurar mediante dos tipos de ficheros Fichero de propiedades.- log4j.properties Fichero XML .- log4j.xml Configuración
  • 38. Los ficheros de configuración de propiedades son mucho mas complicados de entender y no tienen un orden claro. Las configuraciones XML son más fáciles de entender por diferentes programadores, además que es más sencillo darle mantenimiento al archivo XML. Log4j.properties
  • 39. Ejemplo: Log4j.properties # initialise root logger with level DEBUG and call it BLAH log4j.rootLogger=DEBUG, BLAH # add a ConsoleAppender to the logger BLAH log4j.appender.BLAH=org.apache.log4j.ConsoleAppender # set set that layout to be SimpleLayout log4j.appender.BLAH.layout=org.apache.log4j.SimpleLayout
  • 40. Su estructura viene definida en el fichero descriptivo log4j.dtd Se suele colocar en un directorio accesible para la aplicación. Normalmente en caso de las aplicaciones web dentro de la carpeta WEB-INF/classes En algunas versiones de Tomcat hay que especificarlo en los scripts de arranque. CATALINA_OPTS="-Dlog4j.configuration=log4j.xml“ http://wiki.apache.org/logging-log4j/Log4jXmlFormat Log4j.xml
  • 41. Ejemplo: Log4j.xml <?xmlversion="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appendername="console" class="org.apache.log4j.ConsoleAppender"> <paramname="Target" value="System.out"/> <layoutclass="org.apache.log4j.PatternLayout"> <paramname="ConversionPattern" value="%-5p %c{1} - %m%n"/> </layout> </appender> <root> <priorityvalue ="debug" /> <appender-refref="console" /> </root> </log4j:configuration>
  • 42. Log4J se suele inicializar con la siguiente linea: DOMConfigurator.configure("log4j.xml") PropertyConfigurator.configure("log4j.lcf") Para las aplicaciones web la línea de código anterior suele estar dentro de un servlet que se inicializa al cargar la aplicación. Normalmente el nombre del fichero que contiene la configuración se encuentra como un parámetro de dicho servlet. Inicialización
  • 43. Ejemplo: Inicialización servlet <servlet> <servlet-name>log4j-init</servlet-name> <servlet-class>edu.training.jee.Log4jInit</servlet-class> <init-param> <param-name>log4j-init-file</param-name> <param-value>WEB-INF/classes/log4j.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
  • 44. Ejemplo: Inicialización servlet package edu.training.jee; import ...; ... public class Log4jInit extends HttpServlet { public void init() { String prefix = getServletContext().getRealPath("/"); String file = getInitParameter("log4j-init-file"); if(file != null) { //PropertyConfigurator.configure(prefix+file); DOMConfigurator.configure(prefix+file); } } … }
  • 46. Un apartado importante en el uso de las trazas es como utilizarlas cuando se producen errores/excepciones. No siempre hay que escribir las trazas de excepciones a nivel de error, ya que en algunos casos no interesa que se visualicen. En caso de escribir componentes que posteriormente utilicen otras personas, convendrá relanzar la excepción y escribir la traza a nivel de DEBUG o INFO dependiendo de si el programador será el propio usuario de la clase o si un tercero quien la utilice. Se recomienda que en los proyecto no debe estar la configuración de root sino más bien la configuración de un o unos paquetes en especial. Optimización
  • 47. Cuando los logs son apagados el coste de los registros se limita únicamente a la invocación del método. No esta demás decir que la invocación del método esconde el coste de la construcción del parámetro (mensaje). Operador + StringBuilder Desactivar las trazas
  • 48. Se deben evitar lineas de código como por ejemplo: logger.debug("Entrynumber: " + i + " is " + String.valueOf(entry[i])); Para evitar los costos de la construcción de los parámetros es recomendable verificar si el nivel esta activado. Desactivar las trazas if(logger.isDebugEnabled() ){ logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i])); }
  • 49. Los layouts internamente al formatear el texto también involucran penalizaciones. Una de las formas mas sencillas y rápidas incluso que el System.out.println es utilizar el SimpleLayout. El coste de los layouts
  • 50. Dado que los appenders escriben en toda su jerarquía por defecto, supone tantos costes de más, como layouts y destinos de escritura tenga; por eso es recomendable desactivar la aditividad. Aditividad de los appenders
  • 51. Chainsaw 6.- Monitor de mensajes
  • 52. Log4J trae consigo un monitor de mensajes denominado chainsaw, hecho con Java, el cual permite ver el contenido de aquellos ficheros de log en formato XML. Viene dentro log4j-1.2.xx.jar y se puede ejecutar desde línea de comandos java -classpath log4j-1.2.15.jar org.apache.log4j.chainsaw.Main También esta disponible desde el Java Web Start http://logging.apache.org/chainsaw/download.html Chainsaw
  • 53. Chainsaw <appendername="FILE" class="org.apache.log4j.RollingFileAppender"> <errorHandlerclass="org.apache.log4j.helpers.OnlyOnceErrorHandler"/> <paramname="File" value="HolaMundoHibernate.log"/> <param name="Threshold" value="DEBUG"/> <param name="Append" value="false"/> <param name="MaxFileSize" value="5000KB"/> <param name="MaxBackupIndex" value="50"/> <layoutclass="org.apache.log4j.xml.XMLLayout" /> </appender> <logger name="org.hibernate.loader"> <levelvalue="DEBUG"/> <appender-refref="FILE"/> </logger>
  • 54. Chainsaw incorporado en log4j.1.2.15.jar
  • 55. Chainsaw desde el Java Web Start
  • 56. NO! Una técnica consiste siempre en re direccionar a un fichero de texto, y luego este se puede inspeccionar con herramientas como: tail.- en linux Cualquier editor de texto, como por ejemplo vi, ultraedit, notepad++ … La otra mandar los mensajes a bases de datos, para luego explotar la información con otras herramientas especializadas. Chainsaw, ¿el único?
  • 57. Conclusiones
  • 58. Conclusiones Usando la jerarquía de los loggers se pueden controlar granular mente que mensajes deseamos mostrar. Ayuda a reducir el volumen de mensajes registrados. Log4J ofrece distintos tipos de configuración pudiendo registrar los mensajes en distintos tipos de fuentes de manera transparente sin tener que recompilar nuestro código. Ayuda a mejorar el rendimiento y el seguimiento de errores de las aplicaciones.
  • 59. - FIN - Licensed under Creative Commons Attribution 3 Emmerson Miranda SCJP 1.5 SCWCD J2EE 1.5 Blog : http://emmersonmiranda.blogspot.com/