Publicado el 22 de Enero del 2019
559 visualizaciones desde el 22 de Enero del 2019
279,3 KB
28 paginas
Creado hace 11a (26/09/2012)
Experto Universitario Java Enterprise
Lenguaje Java Avanzado
Sesión 6: Depuración y logs
© 2012-2013 Depto. Ciencia de la Computación e IA
Experto Universitario Java Enterprise
Puntos a tratar
• El depurador de Eclipse
• Gestión de logs con Log4Java
• La librería commons-logging
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 2
Experto Universitario Java Enterprise
El depurador de Eclipse
• Eclipse incorpora un depurador que permite inspeccionar cómo funciona nuestro
•
código
Incorpora varias funcionalidades:
• Establecimiento de breakpoints
• Consulta de valores de variables en cualquier momento
• Consulta de valores de expresiones complejas
• Parada/Reanudación de hilos de ejecución
• Existe también la posibilidad de depurar otros lenguajes (C/C++), instalando los
plugins adecuados
• Desde Java 1.4 permite cambiar código “en caliente” y seguir con la depuración
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 3
Experto Universitario Java Enterprise
Depurar un proyecto
• Ejecutamos la aplicación con Debug As
• Normalmente al depurar pasamos a la perspectiva de depuración
• Si no es así, vamos a Window – Open Perspective – Debug
• Vemos los hilos que se ejecutan, los breakpoints establecidos, las
variables que entran en juego... etc
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 4
Experto Universitario Java Enterprise
Establecer breakpoints
• Un breakpoint es un punto donde la ejecución del programa se detiene para
examinar su estado
• Para establecerlos, hacemos doble click en el margen izquierdo de la línea
donde queremos ponerlo
• Luego arrancamos
el programa desde
Run - Debug
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 5
Experto Universitario Java Enterprise
Breakpoints condicionales
• Se disparan sólo cuando se cumple
una determinada condición
• Se establecen con el botón derecho
sobre el breakpoint, eligiendo
Breakpoint Properties
• Colocamos la condición en Enable
Condition
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 6
Experto Universitario Java Enterprise
Evaluar expresiones
• Podemos ver el valor de una expresión compleja seleccionándola (durante una
parada por breakpoint) y eligiendo con el botón derecho Inspect
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 7
Experto Universitario Java Enterprise
Explorar variables
• Si queremos ver qué valores va tomando una variable paso a paso, una
vez alcanzado un breakpoint vamos a Run y vamos dándole a Step Over
o F6
• También podemos, en el cuadro de variables, pinchar sobre una y
cambiar su valor
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 8
Experto Universitario Java Enterprise
Introducción a Log4J
• Log4Java (Log4J) es una librería open source que permite controlar la
salida de los mensajes que generen nuestros programas
• Tiene diferentes niveles de mensajes, que se permiten monitorizar con
cierta granularidad
• Es configurable en tiempo de ejecución
• Más información en:
• http://www.jakarta.apache.org/log4j
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 9
Experto Universitario Java Enterprise
Estructura de Log4J
• El funcionamiento de Log4J se basa en 3 elementos:
• Loggers: entidades asociadas a paquetes o clases, que recogen los mensajes que
dichos paquetes o clases generan
• Se estructuran en forma de árbol, partiendo de un logger raíz que existe
siempre
• Appenders: indican la salida por la que se muestran los mensajes de los loggers
(por pantalla, a un fichero... etc)
• Layouts: indican el formato que va a tener el mensaje al mostrarse (fecha, tipo de
mensaje, prioridad... etc)
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 10
Experto Universitario Java Enterprise
Loggers
• Se tienen 5 tipos (niveles) de mensajes de log:
• DEBUG: mensajes de depuración
• INFO: información acerca del programa (versión, etc)
• WARN: alerta sobre situaciones que no afectan al correcto funcionamiento
• ERROR: errores que afectan al funcionamiento correcto del programa, pero
que le permiten continuar
• FATAL: para mensajes críticos que terminan el programa
• Los loggers recogen los mensajes de algunos o todos estos niveles sobre una
clase o conjunto de clases
• Hay dos niveles más, ALL y OFF, para recoger todos los niveles o ninguno
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 11
Experto Universitario Java Enterprise
Asociar loggers con clases
• Colocamos un objeto org.apache.log4j.Logger en la clase de la que
queramos captar sus mensajes
• Luego llamamos a los métodos del logger para generar mensajes de uno
u otro nivel:
• debug (String mensaje)
• info (String mensaje)
• warn (String mensaje)
• error (String mensaje)
• fatal (String mensaje)
• Se puede configurar qué niveles recoger
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 12
Experto Universitario Java Enterprise
Asociar loggers con clases
• Un ejemplo:
import org.apache.log4j.*;
public class MiClase
{
static Logger logger = Logger.getLogger(MiClase.class);
...
public static void main (String[] args)
{
logger.info (“Entrando en la aplicación”);
...
logger.warn (“Esto es una advertencia”);
...
logger.fatal (“Error fatal”);
}
}
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 13
Experto Universitario Java Enterprise
Appenders
• Permiten indicar dónde van a ir los mensajes de log
• Todos son clases del paquete org.apache.log4j
• ConsoleAppender: para dirigir los mensajes a pantalla
• Threshold=WARN
• ImmediateFlush=true
• Target=System.err
// Nivel mínimo
// No buffering
// Tipo de salida
• FileAppender: para dirigir los logs a un fichero
• Threshold=WARN
• ImmediateFlush=true
• File=logs.txt
• Append=false
// Nombre del fichero
// Sobreescritura
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 14
Experto Universitario Java Enterprise
Appenders
• RollingFileAppender: para dirigir los logs a un fichero, que se permite rotar
• Threshold=WARN
• ImmediateFlush=true
• File=logs.txt
• Append=false
• MaxFileSize=1MB
• MaxBackupIndex=2
// Tamaño máximo (KB|MB|GB)
// Ficheros antiguos a guardar
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 15
Experto Universitario Java Enterprise
Otros appenders
• JDBCAppender: para dirigir los logs a una base de datos JDBC
• SocketAppender: redirecciona los mensajes a un servidor remoto
• SMTPAppender: envía un e-mail con los mensajes de log que se le
indiquen
• SyslogAppender: envía los logs al demonio syslog de Unix
• ... etc
• Más adelante veremos cómo establecerlos y configurarlos
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 16
Experto Universitario Java Enterprise
Layouts
• Indican el formato de salida de los mensajes de log
• Todos son clases del paquete org.apache.log4j
• SimpleLayout: prioridad del mensaje, y texto del mismo
• DEBUG – Hola, esto es un mensaje
• PatternLayout: admite marcas %x para mostrar las partes que nos
interesen:
• %d: fecha del mensaje (%d{dd/MM/yy HH:mm:ss})
• %m: texto del mensaje
• %n: salto de línea en la salida
• %p: prioridad del evento de log
• ... etc
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 17
Experto Universitario Java Enterprise
Otros layouts
• HTMLLayout: la salida la vuelca a una tabla HTML
• XMLLayout: saca la salida a un fichero XML compatible con la DTD de Log4J
(log4j.dtd)
• TTCCLayout: saca algunos elementos predefinidos, como fecha, hilo de
ejecución, categoría del log y NDC (Nested Diagnostic Context) del evento de
log.
• ... etc
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 18
Experto Universitario Java Enterprise
Configurar Log4J
• Una vez hemos incluído el Logger en nuestras clases Java que queramos
gestionar, basta con configurar la clase principal
• La configuración por defecto la tenemos con el método
BasicConfigurator.configure( )
import org.apache.log4j.*;
public class MiClase {
static Logger logger = ...;
...
public static void main(String[] args) {
BasicConfigurator.configure();
...
logger.warn(“...”);
...
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 19
Experto Universitario Java Enterprise
Otras configuraciones
• Podemos configurar Log4J con otras opciones, desde ficheros de propiedades (con
PropertyConfigurator), o desde ficheros XML (con DOMConfigurator)
import org.apache.log4j.*;
public class MiClase {
static Logger logger = ...;
...
public static void main(String[] args) {
PropertyConfigurator.configure(String fichero);
DOMConfigurator.configure(String fichero);
...
• Se tienen los métodos configureAndWatch(...) en uno y otro, para revisar si la
configuración cambia en tiempo de ejecución
Lenguaje Java Avanzado
© 2012-2013 Depto. Ciencia de la Computación e IA
Depuración y logs - 20
Experto Universitario Java Enterprise
Ejemplo de fichero de propiedades
# Coloca el nivel root del logger en DEBUG (muestra mensajes de DEBUG hacia arriba)
# Añade dos appenders, llamados A1 y A2
log4j.rootLogger=DEBUG, A1, A2
# A1 se redirige a la consola
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 utiliza PatternLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.
Comentarios de: Sesión 6: Depuración y logs - Java Avanzado (0)
No hay comentarios