Está usted en Indice > Construcción > Lenguajes > Java > Lecciones y Paso a Paso > Sistemas de trazas en Java
Construcción
Maletín
Utilidades
Cursos
Promoción
Rentabilidad
Zona Novatos
Foros
Acceso a tu cuenta

Sistemas de trazas en Java (2)

Categorías (ó como filtrar las trazas)

Para ver esta característica es necesario adentrarse un poco más en la configuración y el código necesario para trabajar con Log4j. En el siguiente ejemplo se muestra como tracear una clase.


import org.apache.log4j.* public class Pruebaslog4j { Logger log = Logger.getLogger(this.getClass()); /** Creates a new instance of Pruebaslog4j */ public Pruebaslog4j () { try { log.info("Constructor"); log.warn("nivel WARN"); if (log.isDebugEnabled()) { log.debug("Traza de nivel debug"); } } catch (IllegalStateException e) { log.error("Traza de nivel error", e); } } /** * @param args the command line arguments */ public static void main(String[] args) { Pruebaslog4j pl4j = new Pruebaslog4j (); } }

En la segunda línea se obtiene el objeto con el cual se escriben las trazas, el objeto Logger. Se puede hacer referencia a este objeto bajo el nombre "escritor", ya que es el quien se encarga de escribir los mensajes a los diferentes soportes con los cuales Log4j trabaja.

Para obtener este objeto se le pasa la clase, o el nombre completo de la clase, es decir, paquete.otropaquete.NombreClase, o cualquier otro nombre con el que se defina la categoría de esta traza. Una categoría suele ser el nombre completo de la clase, ya que normalmente, las aplicaciones se dividen en diversos paquetes. También, si un componente utiliza más de un paquete es común definir la categoría con el nombre del componente, para tratar de la misma forma las trazas escritas en los dos paquetes.Se puede jerarquizar las categorías, separando los niveles con "."(Puntos). Por tanto si se define la categoría con el nombre componente.primario, primario es una categoría hija de componente. Como veremos mas adelante, las configuraciones que se asocien a componente serán heredadas por primario. Estas configuraciones se realizan en el archivo de configuración .


Archivo de configuración

Log4j se puede configurar desde un archivo XML o desde un archivo de propiedades. Empecemos por la mas antigua y sencilla, el archivo de propiedades.

Para configurar Log4j de esta forma es necesario que el archivo log4j.properties este en el CLASSPATH de nuestra aplicación. Esto quiere decir que tiene que estar en la raíz de nuestro código, o dentro de algún archivo JAR que nuestra aplicación cargue, o al lanzar el programa, fijando la propiedad del sistema con el argumento


java Clase -Dlog4j.configuration=log4j.properties
Este archivo comienza con la configuración del nivel principal de la jerarquía, el ROOT. Bajo este nivel se encuentran todas las categorías de nuestra aplicación. Para configurar el nivel ROOT hay que escribir en el fichero de propiedades la propiedad log4j.rootLogger e igualarla al nivel de prioridad que por defecto se desea fijar. Tras el nivel de prioridad, separados entre comas, los diferentes appenders a los que por defecto se desean redireccionar nuestras trazas. (Aprenders??? la explicación un poco más abajo, paciencia ;-)
log4j.rootLogger=DEBUG, Consola, Fichero

En el ejemplo fijamos el nivel por defecto a DEBUG (muy típico cuando estamos desarrollando el código) y redireccionamos a los appenders Consola y Fichero.

Ya tenemos todo nuestro código fijado con un nivel de trazas DEBUG. En muchos casos, no nos interesa ver todas las trazas de una aplicación, por ejemplo, cuando se utiliza un componente cuyo funcionamiento ya ha sido probado. Para subir el nivel de traza a INFO o WARN en dicho componente escribimos la siguiente propiedad en el fichero de configuración.


log4j.Logger.NombreCategoria=INFO

O si se utiliza como nombre de categoría la ruta completa a las clases


log4j.Logger.com.empresa.componente=INFO

Cuando se realiza esta operación, decimos que la categoría tiene un nivel de traza fijado de forma explicita. Esto hace que el paquete "com.empresa.componente" tenga el nivel de traza fijado a INFO, o lo que es lo mismo, no se escribirá ninguna traza de nivel DEBUG dentro de ese paquete. Si el componente tiene subpaquetes, y estos no tienen un nivel de traza fijado de forma explicita, heredan el nivel de traza del paquete que los contiene.

Visto al revés, si un paquete no tiene asignado de forma explicita un nivel de prioridad de traza, el paquete obtiene el nivel del paquete en el que esta contenido. Así de forma recursiva, hasta que se encuentre con un paquete con nivel de traza asignado de forma explicita o con el nivel principal de la jerarquía, con ROOT.

A continuación 3 ejemplos que visualizan el comportamiento de herencia anteriormente descrito. (Fijaros en la última columna)

Nivel Jerarquía Clases CATEGORIA Nivel de traza asignado de forma explicita Nivel de traza asignado
root DEBUG DEBUG
X ninguno DEBUG
X.Y ninguno DEBUG
X.Y.Z ninguno DEBUG

Nivel Jerarquía Clases CATEGORIA Nivel de traza asignado de forma explicita Nivel de traza asignado
root DEBUG DEBUG
X WARN WARN
X.Y INFO INFO
X.Y.Z DEBUG DEBUG

Nivel Jerarquía Clases CATEGORIA Nivel de traza asignado de forma explicita Nivel de traza asignado
root DEBUG DEBUG
X ninguno DEBUG
X.Y ninguno DEBUG
X.Y.Z INFO INFO



Usuarios que han visto este tema también han visto...

- Clases e instancias en Java.
- Descompilar codigo Java
- Introducción a las Java Server Pages
- Precisión infinita en Java
- La fecha en un JSP


Versión imprimible - Versión imprimible de este documento
Enviar e-mail - Enviar por e-mail este documento
Publicidad

Información legal | Política de Privacidad | Contacte con nosotros

Otro proyecto de Factoría de Internet. Copyright© 2003-2008 Factoría de Internet S.L.. Todos los derechos reservados.


Página generada el 22-11-2008 a las 11:41:53