2. 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(“”);
3. 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?
4. 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.
5. 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.
6. 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/
7. 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
8. 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.
9. Log4J componentes básicos.
• Maneja tres componentes básicos.
– Nivel de prioridad de traza.
– Appenders.
– Layouts.
– Configuración.
10. Log4J Nivel de prioridad de traza.
• DEBUG
• INFO
• WARN
• ERROR
• FATAL
• ALL
• OFF
Nivel básico
Nivel extra
11. 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.
12. Log4J Nivel de prioridad de traza.
• INFO
– Se utiliza para mensajes similares al modo
"verbose" en otras aplicaciones.
13. 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.
14. 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.
15. Log4J Nivel de prioridad de traza.
• FATAL
– Se utiliza para mensajes críticos del sistema,
generalmente luego de guardar el mensaje el
programa abortará.
16. Log4J Nivel de prioridad de traza.
• ALL
– Este es el nivel más bajo posible, habilita todos los
logs de la aplicación.
17. Log4J Nivel de prioridad de traza.
• OFF
– Este es el nivel más alto posible, deshabilita todos
los logs.
18. 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.
20. 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.
23. 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
24. 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
25. 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>
26. 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");
}
}
27. 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
29. 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");
}
}