Mostrando entradas con la etiqueta configuracion log4j. Mostrar todas las entradas
Mostrando entradas con la etiqueta configuracion log4j. Mostrar todas las entradas

martes, agosto 16, 2011

Creando una aplicacion con JSF RichFaces parte III

En esta ocacion haremos la integracion de nuestro proyecto con el framework de spring, que nos ayudara a hacer inyeccion de dependencias he integrar funcionalidades me una manera mas facil y transparente.

En la anterior entrada olvide comentar 2 puntos, donde poner el log4j y como invocarlo
     

     log4jConfigLocation     /WEB-INF/log4j.xml

     
          org.springframework.web.util.Log4jConfigListener
     


Ahora si para agregar spring a nuestro proyecto: 

1.- Agregando las librerias
/**
* En mi Caso utilizo las varsiones 3.0.5 de estos jar
* org.springframework.asm.jar
* org.springframework.beans.jar
* org.springframework.context.jar
* org.springframework.core.jar
* org.springframework.expression.jar
* org.springframework.web.jar
*/
2.- Creando el application-context.xml






3.- Modificando el web.xml


     contextConfigLocation               /WEB-INF/applicationContext-faces.xml
     
	


     
          org.springframework.web.context.ContextLoaderListener
     


     
          org.springframework.web.util.IntrospectorCleanupListener
     


     
          org.springframework.web.context.request.RequestContextListener
     


4.- Modificando el faces-config.xml







     org.springframework.web.jsf.DelegatingVariableResolver


5.- Creando los bean
/**
* lo hare estilo struts, un form que llamo bean y un action que llamo "cont"
* el bean lo coloco en com.tutorial.rich.faces.bean
* el contenedor lo coloco en com.tutorial.rich.faces.content
*/

public class Login {
private String usuario;
private String password;

public String getUsuario() {
	return usuario;
}
public void setUsuario(String usuario) {
	this.usuario = usuario;
}
public String getPassword() {
	return password;
}
public void setPassword(String password) {
	this.password = password;
}
}

/**
* agrego una llamada a mi log4j
*/
public class LoginCont {
	private static Logger log = Logger.getLogger(LoginCont.class);
	
private Login loginBean;

public Login getLoginBean() {
	return loginBean;
}
public void setLoginBean(Login loginBean) {
	this.loginBean = loginBean;
}

public String cmdLogin(){
	if(getLoginBean().getUsuario().equals("") 
|| getLoginBean().getPassword().equals("")){
		log.info("usuario invalido");
	}else{
		log.info("usuario valido");		
	}
	return null;
}
}
6.- Invocando al bean desde el jsp

  
    



















NOTAS, HASTA AQUI TENEMOS CONFIGURADO SPRING Y UN EJEMPLO DE COMO ACCESAREMOS A LOS BEANS,
PERO AUN NO EXPLICO EL FUNCIONAMIENTO DE JSF, LO HARE AL MOMENTO QUE TENGAMOS HIBERNATE INTEGRADO CON NUESTRO PROYECTO..., RECUERDA SI TIENES DUDAS U OBSERVACIONES AGRADECERE TUS COMENTARIOS

martes, marzo 29, 2011

configurando log4j para una aplicacion web utilizando datos variables

Algunas veces cuando tenemos una aplicacion, que se alojara en diferentes servidores, necesitamos guardar el archivo en diferentes ubicaciones, pero para no estar modificando cada ves nuestra aplicacion, podemos utilizar datos variables, como la ruta del archivo, asi nos podemos casi casi olvidar de configurar las rutas

para el ejemplo necesitamos dar una leida a los 2 anteriores articulos de log4j para realizar esto de una forma rapida

lo que necesitamos realizar es

1.- creamos una clase que herede de nuestro escuchador Log4jConfigListener que tenemos en nuestro web.xml

public class ConfiguradorLog4J extends Log4jConfigListener {
}


2.-
sobre escribimos el constructor de nuestra clase

public ConfiguradorLog4J(){
super();
}

3.-
tenemos de 2 definir en esta clase la ruta (que es poco conveniente por que si queremos cambiar la ruta tenemos que recompilar el proyecto) o obtener la ruta de un archivo properties

en este caso simulare que obtengo la ruta de un archivo properties (el acceso al properties lo explicare en otra entrada)

4.-
en nuestro constructor tendriamos que hacer algo como
System.setProperty("ruta.archivo.log4j", PropertyUtils.getProperty("ruta.archivo.log4j"));


lo que estamos haciendo es agregar a las propiedades del proyecto una nueva propiedad que contiene la ruta de nuestro archivo de log, la propiedad se llamara en este caso
ruta.archivo.log4j y la obtiene de una clase que accesa a un archivo de propiedades

5.-
tenemos que modificar nuestro archivo xml, especificamente donde indicamos la ruta del archivo donde guardaremos los logs

lo cambiariamos por:
param name="file" value="${ruta.archivo.log4j}/archivo_de_log.log" /
ahora cada ves que nuestra aplicacion cambie de servidor o de ruta de logs, solo tenemos que cambiar el archivo de propiedades y reiniciar nuestra aplicacion en el servidor

6.- finalmente, tenemos que cambiar nuestro listener en el archivo web.xml

en ves de tener la siguiente linea:
listener-class
org.springframework.web.util.Log4jConfigListener
/listener-class

por:

listener-class
paquete.de.tu.archivo.de.log.ConfiguradorLog4J
/listener-class

y hemos terminado una configuracion dinamica de nuestro log4j


NOTA: tambien puedes utilizar las propiedades de tu apache o de java, si fuera el caso no es necesario que realizes todos los pasos anteriores, el unico que tendrias que realizar seria el paso numero 5, puedes utilizar variables como:
user.home, java.home etc.

les dejo una pagina con propiedades de java que pueden utilizar, el unico detalle es que algunas cambian de valor en aplicaciones stand alone y web, pues unas toman valores dependiendo del servidor que utilicen

http://www.mindspring.com/~mgrand/java-system-properties.htm

lunes, marzo 28, 2011

configurando log4j para una aplicacion stand alone

Esta ocacion, abordare de forma rapida como poder configurar log4j en nuestros proyectos stand alone.

algunas ocaciones queremos tener un registro de algunos acontesimientos que pasan con nuestra aplicacion, por ejemplo tener un documento donde guardar la hora en que ocurrio algo inersperado en el sistema, una exception, o alguna accion.

una forma muy sensilla es utilizar esta libreria para lograr nuestro cometido, por lo cual necesitamos tener lo siguiente:

1.- descargar la libreria de log4j en -> http://logging.apache.org/log4j/1.2/download.html

ahora en tu proyecto crea una carpeta a la altura de src, que puedes llamar lib (por estandar), agregar la libreria que descargaste

hecho esto ve a las propiedades de tu proyecto, y agrega la libreria (esto es necesario solo para aplicaciones stand alone, y se hace por defecto para aplicaciones web)

lo que pasa a continuacion, es que cuando ejecutes tu aplicacion, te diria antes de hacer cualquier cosa, que configures tu log4j

bueno, ahora configuremoslo:

crea un archivo .xml y llamalo digamos logsAplicacion :)

TODO LOS CODIGOS LLEVAN SU MAYOR Q Y MENOR Q, SOLO Q ME LOS QUITA ¬¬

1.- cuando creas un xml por defecto se pone :
?xml version="1.0" encoding="UTF-8"?
pero bueno si no ya sabes q hacer.

2.- agrega la siguiente linea de codigo para que tu aplicacion sepa q se trata de un documento de configuracion para el log
!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd"

ahora todo el codigo que veremos a continuacion va entre un bloque xml

log4j:configuration debug="true"

/ log4j:configuration

tenemos 2 configuraciones basicas, que crees un archivo y guardes todos tus acontecimientos o que imprimas en consola todos tus acontecimientos, veamos la primer forma

3.- tenemos que crear un bloque appender, dentro del cual configuraremos nuestras politicas para crear el archivo de log, le brindamos tambien un nombre para poder utilizarlo despues
appender name="log_en_archivo" class="org.apache.log4j.RollingFileAppender"

/ appender


4.- dentro de este bloque, definimos el tamaño maximo de nuestro archivo:
param name="maxFileSize" value="100MB" /

5.- definamos la ruta y nombre de nuestro archivo
param name="file" value="c://logs/archivo_log.log" /

6.- definamos el layout que utilizaremos para escribir la informacion en el archivo
layout class="org.apache.log4j.PatternLayout"

param name="ConversionPattern" value="%d{ISO8601} %5p %c{1}:%M - %m%n"/

/ layout
no abundare mucho en esta parte, pero para mas informacion, busca el apli de log4j, la clase patternLayout

7.- bueno hemos terminado con el bloque appender, ahora tenemos que llamarlo, es algo asi como si de un metodo llamaramos a otro
root

priority value="info" /

appender-ref ref="
log_en_archivo"/

/root


si queremos que la informacion se pinte en consola solo hay que modificar un poco lo que ya tenemos

1.-
la clase que ocupa nuestro appender cambiaria, ya no seria RollingFileAppender, seria ConsoleAppender lo que nos llevaria a algo como:

appender name="log_en_consola" class="org.apache.log4j.ConsoleAppender"

2.-
los parametros de tamaño de archivo y archivo los sustituimos por:

param name="Target" value="System.out"/

esto hara que el log se pinte en consola

3.- y para llamarlo, en el bloque root llama al nuevo appender
si quieres llamar a los 2 solo agrega los 2 llamados a los appender, asi lo puedes realizar n veces

NOTA: si ves el bloque root tengo una etiqueta llamada priority, es por que los log se manejan por prioridad, en este caso tengo info, pero hay mas como debug, pero la neta no recuerdo los otros, como sea en el api de log4j lo encuentras :) si no me mandas un comment

LLAMANDO A NUESTRO ARCHIVO DE CONFIGURACION

ya tenemos nuestro archivo de configuracion, si lo hubieramos nombrado log4j.xml hay hubieramos terminado todo, ya que al cargar la libreria, al ejecutar el proy se busca el archivo de configuracion con ese nombre. pero pues q chiste, por eso lo hemos nombrado
logsAplicacion.xml

para
poder invocar el archivo en tu clase principal, antes de q comienzes a codificar, llamemos a nuestro log. Dentro de nuestra clase main hacemos lo siguiente

1.- DOMConfigurator.configure(Loader.getResource("
logsAplicacion.xml"));
no indicamos ruta, pues se supone que este archivo se encuentra a dentro de la carpeta src

SOLO NOS FALTA PODER UTILIZAR NUESTRO ARCHIVO DE CONFIGURACION

ya tenemos nuestro archivo, y ya esta cargado, falta utilizarlo en las clases que deceemos

1.- supongamos q tenemos una clase llamada Pruebas.java

2.- dentro de la clase, y como una variable global declaramos a nuestro loguer, haciendo llamado a la clase que queremos loguear
private static Logger log = Logger.getLogger( Prueba.class );


y por ejemplo en ves de poner System.out.println("Entrando al sistema");
System.out.println("Operacion Realizada");

bastara poner log.info("Entrando al sistema");
log.("Operacion realizada");

en el caso de las excepciones como

try{ }
catch(SQLException e) {
System.out.println("Error en la consulta");
}

pondriamos


try{ }
catch(SQLException e) {
log.error("Error en la consulta", e);
}

asi tanto en archivo como consola se imprimira todo lo que deceemos, para poder asi tener un control de nuestras acciones


como pueden ver en realidad no es mucho trabajo, por algo muy presiado como son los logs, que nos pueden sacar de grandes aprietos, sin necesidar de tener que debuguear una aplicacion para saber donde ocurrio un error o algo por el estilo

espero que sea de su agrado.