Un logger es un conjunto de información o mensajes que un sistema de información genera por diversas causas, en este caso, se clasifican por niveles (FATAL, ERROR, WARNING, INFO, DEBUG y TRACE). Lanzaremos un mensaje de tipo FATAL cuando nuestro programa no pueda continuar, en el cual se indicará la causa, el tiempo y otros diversos parametros, por otro lado, uno del tipo DEBUG para verificar los resultados de nuestro sistema en tiempo de desarrollo. En el archivo de configuración especificaremos el nivel más bajo sobre el cual se mostraran mensajes, así podemos tener INFO y DEBUG en nuestro programa, pero si el nivel del log es WARNING, ERROR o FATAL, todos los INFO ,DEBUG y TRACE no se mostrarán, pero la instrucción sí será revisada, consumiendo recursos del sistema, más adelante se comprenderá esto
Log4j nos provee de un número importante de clases, de las cuales generalmente sólo importaremos un par a nuestros archivos .java. Se sirve además de un archivo de configuración, del tipo properties o xml generalmente, para indicar diversos modificadores para la acción del logger, por ejemplo:
- El destino de los mensajes (consola, archivo, red, etc),
- El formato y orden de los mensajes (hora, mensaje, fecha, causa, nivel de evento),
- Diversas propiedades del destino de los mensajes (nombre del archivo, puerto, tipo de archivo, etc).
- JDK instalado en nuestro ordenador,
- Descargar el framework http://logging.apache.org/log4j/
- Agregar al classpath el log4j-*.*.*.jar
Un Appender no es otra cosa que el destino de los mensajes, un appender puede ser la consola o un archivo, o ambos pueden ser configurados para ser usados en un mismo sistema. El Layout es solamente el formato de los mensajes en los appenders, es decir, el orden de los datos de un mensaje enviado al log.
Listo ahora veamos un formato del archivo properties (miarchivo.properties):
#Especificamos el level más bajo que se puede utilizar, y el nombre de la configuración que vamos a usar, en DEBUG, todos se muestran, excepto TRACE.
log4j.rootCategory=DEBUG,MiAppender, Otro
#Declaramos el appender, de que tipo es y sus caracteristicas (FileAppender es un archivo simple)
log4j.appender.MiAppender=org.apache.log4j.FileAppender
#El archivo donde se van a guardar los datos
log4j.appender.MiAppender.file=server.log
#El formato en que se van a mostrar los datos, en este caso como XML
log4j.appender.MiAppender.layout=org.apache.log4j.xml.XMLLayout
#En este tipo de Appender, append false significa que se reescriba el archivo cada vez que se reinicia la aplicación, true al contrario, agregaria los nuevos datos al final del archivo
log4j.appender.MiAppender.append=false
#Otro Appender, este va a consola, los dos funcionarán
log4j.appender.Otro=org.apache.log4j.ConsoleAppender
# Layout simple, el formato de mensaje más simple o por default
log4j.appender.BLAH.layout=org.apache.log4j.SimpleLayout
Podemos usar este archivo en la clase MiEjemplo.java:
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class MiEjemplo{
static Logger logger=Logger.getLogger(MiEjemplo.class);
public static void main(String[] args){
PropertyConfigurator.configure("miarchivo.properties");
logger.info("Comienzo");
MiEjemplo mio=new MiEjemplo();
mio.hacer();
ogger.info("Fin");
}
void hacer(){
logger.debug("No debe verse despues si cambiamos el rootCategory a INFO o mayor");
}
}
El ejemplo es explicativo, para mandar diversos mensajes a diversos niveles, usaremos la instancia de la clase Logger sobre la clase que indicamos (para saber en que clase se manda el mensaje) y cargamos el archivo properties con el método configure de la clase PropertyConfigurator y listo a mandar mensajes y lo mejor, una vez compilado, solo hay que cambiar el archivo properties para redireccionar los loggers y cambiar los niveles, si el nivel fuera INFO, el mensaje del método hacer no aparecerá, pero debemos ser cuídadosos, pues de todos modos se mandará a llamar el método debug(), aunque no imprima nada. Podríamos saber si el nivel debug está activado con logger.isDebugEnabled, etc.
El otro formato de configuració es el xml (xmllog4jconfig.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="appender" class="org.apache.log4j.FileAppender">
<param name="File" value="Indentify-Log.txt"/>
<param name="Append" value="false"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
</layout>
</appender>
<root>
<priority value ="debug"/>
<appender-ref ref="appender"/>
</root>
</log4j:configuration>
Bien, en este ejemplo observamos el FileAppender, que también se encuentra en el archivo properties, lo diferente de este archivo con el otro es el formato xml para empezar, las 3 primeras líneas no deberían de cambiar a menudo. Luego viene la configuración de los Appender, y dentro de ellos, (en este ejemplo, pues se pueden especificar en otro lado) los Layout. Aquí sí vemos un ejemplo de formato, Apache tiene un lista muy completa de los formatos que se pueden agregar, los cuales van procedidos por un simbolo de porcentaje (%) para indicar un campo. Y al final, vemos el nivel de configuración del log, y los appender que se van a usar para el sistema. El archivo java cambia un poco, y se utiliza el configure de la clase DOMConfigurator:
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
public class XmlTest{
static Logger logger = Logger.getLogger(XmlTest.class);
public static void main(String args[]) {
DOMConfigurator.configure("xmllog4jconfig.xml");
logger.debug("Here is some DEBUG");
logger.info("Here is some INFO");
logger.warn("Here is some WARN");
logger.error("Here is some ERROR");
logger.fatal("Here is some FATAL");
}
}
No hay comentarios.:
Publicar un comentario