Translate

miércoles, 20 de febrero de 2013

Configuración de Log4j para un proyecto WEB con un archivo de properties

Log4j web Project configuration

El post de hoy surge por la necesidad de configurar correctamente los logs que salen por consola en nuestros proyectos WEB.

Se acabó el utilizar el el System.out.println.



La configuración es muy variada:

1 - Configuración por programación: Desde un public void Main:
2 - Configuración desde un XML
3 - Configuración desde un archivo de properties.

pero aquí me voy a centrar en mi caso particular que es la configuración de log4j en un proyecto WEB a través de un archivo de properties.

1 - Lo primero que necesitamos tener es la última versión de nuestra librería favorita log4j.

2 - Configuramos un proyecto WEB en nuestro IDE favorito, eclipse en mi caso.

3 - Ponemos la librería (log4j-1.2.17.jar) en el directorio WEB-INF/lib

4 - Creamos y configuramos un servlet para poder realizar las pruebas, en mi caso con Spring Framework.

Una vez que tenemos el proyecto correctamente configurado vamos a lo que nos interesa

5 - Creamos el archivo log4j.properties en el raíz del directorio src para que esté en la raíz de nuestras clases, con la siguiente configuración

--
# log4j.properties for 

# Set root category priority to DEBUG and its only appender to Console.
log4j.rootLogger=debug,stdout


#appender definition
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= linea %L %c %d %m  %n

--

Con estos pasos ya sería suficiente para que aparecieran trazas pero vamos a ver como configurar, pero vamos a entender un poco como funciona.

Tenemos que diferencias entre loggers, appenders y layouts

Un logger es el elemento que se encarga de recopilar y generar los logs en base a una configuración de un appender y un patternlayout. En nuestro ejemplo el logger es stdout

Un appender es donde se almacenan los logs generados por los loggers, hay muchos tipos lo más usados el org.apache.log4j.ConsoleAppender para mostrarlo por consola. Para ampliar información en las referencias hay un montón de tipos.

Un layout es la manera en que se imprime la traza, es decir que información escribirá el logger en el appender.

El rootLogger = Es el padre de todos los appenders y la cong

Con el código que hemos puesto en la clase log4jtest.java y con la configuración de log4j.properties en debug nuestras trazas que aparecerían en la consola serian las siguientes:


linea 22 org.antuansoft.mvc.log4jtest 2013-02-16 02:48:15,057 debug
linea 23 org.antuansoft.mvc.log4jtest 2013-02-16 02:48:15,058 error
linea 24 org.antuansoft.mvc.log4jtest 2013-02-16 02:48:15,058 info
linea 25 org.antuansoft.mvc.log4jtest 2013-02-16 02:48:15,058 fatal
linea 26 org.antuansoft.mvc.log4jtest 2013-02-16 02:48:15,058 trace  Esta no debe de salir

Modificando la línea:


log4j.rootLogger=debug,stdout

podemos modificar el nivel de nuestros logs para que aparezcan o no las trazas que queremos.




Si pongo

log4j.rootLogger=error,stdout

al configurarlo para que salgan las trazas de error, las dos únicas líneas que aparecerían serían:



linea 24 org.antuansoft.mvc.log4jtest 2013-02-16 02:48:15,058 info
linea 25 org.antuansoft.mvc.log4jtest 2013-02-16 02:48:15,058 fatal


UPDATE:

Si lo que quieres es modificar el nivel de log de uno de los paquetes de tu proyecto nada más, lo que tienes que hacer es añadir la siguiente línea al log4j.properties

log4j.category.com.mypackage=LEVEL
Por ejemplo:
log4j.category.org.antuansoft.mvc=info
Eso haría que sólo las trazas que contengan ese paquete se muestren en modo info y el resto en el modo que hayamos especificado el rootlogger.



Aquí dejo un enlace con el de código y información ampliada  en los enlaces.

Código en githup, ejemplo MVC con SpringFramework y log4j

Para acceder sólo hay que ponerlo en un servidor de aplicaciones tomcat y ejecutar la siguiente url

http://localhost:8080/AntuanSoft_BASE_WEB_SPRING_PROJECT/log4jtest





Referencias: Para más información este tutorial cubre todos los casos http://www.javatutoriales.com/2011/04/log4j-para-creacion-de-eventos-de-log.html
http://www.arquitecturajava.com/log4j-y-pattern-layouts/
http://stackoverflow.com/questions/1725958/how-do-you-change-a-packages-log-level-using-log4j

jueves, 14 de febrero de 2013

MongoVUE: Cliente de MongoDB para Windows: un SQLYog para MongoDB

Nosotros hasta ahora utilizábamos RockMongo que es un cliente WEB basado en PHP y como producto está bien te permite crear, borrar, exportar e importar bases de datos, consultar, insertar y ejecutar funciones javascript.

Pero para mi uno de los problemas es que está basado en web y tienes que tener un servidor web para montarlo y es poco cómodo.



Se echa de menos una solución parecida a SQLYog para MySQL donde es instalas un cliente configuras tus conexiones desde el cliente y ya puedes acceder.

Pues la opción de este tipo para MongoDB es MONGOVUE, los instalas pones tu conexión y nos permite las mismas funciones que rockmongo y de una manera bastante intuitiva.




Referencia:

http://stackoverflow.com/questions/4269688/mongo-interface

martes, 12 de febrero de 2013

Error empaquetando aplicacion AIR: Could not BER decode the CRL


El siguiente código de error se produjo en el proceso de firmado de una aplicación AIR con un certificado oficial.

[exec] Could not BER decode the CRL.
[exec] Result: 9

Si miramos los códigos de error vemos que el error quiere decir que el Exit Code 9 quiere decir

9 Could not sign AIR file Verify the signing options passed to ADT.

Lo cual no nos dice mucho o nada.

Navegando por internet veo que este error se puede producir porque en el proceso de firmar el paquete air con el certificado requiere mirar una lista de certificados revocados (ChosenSecurity (TrustCenter)), o sea que necesita poder conectarse a intenet para hacerlo.

Soluciones:

1 - El TrustCenter está caído y no funciona, con lo cual la solución que proponen en otros blogs (ver referencias) es quitar la conexión a internet, para poder firma el certificado.

2 - El que es mi caso, nuestro servidor donde se está generando el paquete AIR no tiene conexión a intenet o lo tiene capado y debemos de habilitarla para que funcione correctamente.

Referencias:

http://blogs.balsamiq.com/tech/2010/02/09/error-creating-air-file-could-not-ber-decode-the-crl/

http://forums.adobe.com/thread/573613

lunes, 11 de febrero de 2013

Eclipse: Problemas con subversion al cambiar entre ramas del repositorio SVN

Title: Eclipse SNV problems switching between branches.

Yo trabajo con Eclipse Indigo, con el repositorio Subversion y con el correspondiente plugin para Eclipse de subversion (subclipse 1.8.16)

Nosotros estamos trabajando con una rama principal TRUNK y una rama de mantenimiento BRANCH con 11 proyectos distintos y de distinta tipología, unos son proyectos Flex y otros son proyectos Java.

El problema que he detectado es que al hacer switch entre las distintas ramas es el siguiente: cuando en la rama que tengo mi workspace (TRUNK) no hay una serie de archivos que sí están en la rama de manteniento (BRANCH) estos no se actualizan al hacer el swicth. Por lo tanto al compilar el proyecto da errores porque hay archivos que no existen.

Al sincronizar con el repositorio este nos dice que los archivos existen y nos invita a descargarlos, pero al intentar descargarlos (update) no es posible y no devuelve ningún tipo de error.

Claramente parece un problema de los archivos .svn que Subversion utiliza para llevar todo su control de versiones y al hacer un switch entre ramas esos archivos tiene que modificarse y quizás algo no funciona correctamente.

Si queremos solucionar este problema para que tus archivos .svn vuelvan a estar correctos lo que hay que hacer un Team-->Clean-up del proyecto, pero esto no suele arreglar mucho.

El Clean-up hay que hacerlo desde fuera de eclipse, con un cliente de SVN, en nuestro caso para windows (TortoiseSVN 1.7.11). Desde la carpeta donde tenemos nuestro proyecto  con problemas realizamos la siguientes acciones:





Con eso todo nuestros archivos .svn estarán plenamente recuperados y podremos seguir trabajando.