Your SlideShare is downloading. ×
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Log4j 1.2.15 Short Manual
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Log4j 1.2.15 Short Manual

17,247

Published on

Short manual of Log4j, Log4net similar

Short manual of Log4j, Log4net similar

Published in: Technology, Education
4 Comments
8 Likes
Statistics
Notes
No Downloads
Views
Total Views
17,247
On Slideshare
0
From Embeds
0
Number of Embeds
20
Actions
Shares
0
Downloads
669
Comments
4
Likes
8
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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/
  • 4. 1.- Introducción
  • 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
  • 9. 2.- Características
  • 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
  • 12. 3.- Componentes
  • 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.
  • 17. Matriz de prioridades
  • 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
  • 21. Appenders
  • 22. Appenders
  • 23. Appenders
  • 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
  • 31. Loggers
  • 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
  • 34. 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);
    }
    }

    }
  • 45. 5.- Optimización
  • 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/

×