Skip to main content

Logging de Faces. JSF2.

· 3 min read

Al pasar del JSF1.2 a JSF2, en Mojarra, podemos observar que en consola se muestran mensajes de log, que en versión JSF1.2 no aparecían, con el siguiente formato:

26-ene-2012 11:54:16 com.sun.faces.renderkit.RenderKitUtils renderUnhandledMessages INFO: ADVERTENCIA: FacesMessage(s) se han puesto en la cola, pero es posible que no se muestren.

o en inglés

26-ene-2012 11:54:16 com.sun.faces.renderkit.RenderKitUtils renderUnhandledMessages INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.

Tras estos mensaje aparece una lista de sourceIds con su correspondientes severity, summary y detail de los mensajes que supuestamente no se han mostrado en la secciones de mensajes de la ventana.

Este mensaje de información se debe a que en nuestra ventana no hemos puesto correctamente los tags h:messages y/o h:message y el sistema supone que no han sido mostrados debidamente. El problema está relacionado con mensajes asociados a componentes de la ventana a los que no les hemos asociado un h:message de forma correcta. Sin embargo, en muchas ocasiones, a pesar de poner correctamente los tag mencionados y el atributo global, los mensajes se muestran en la ventana y el log sigue saliendo en consola. Otras veces podemos decidir que no nos interesa poner correctamente los h:message porque puede ser una tarea larga y tediosa de realizar o, incluso, puede conllevar el tener que cambiar el código que controla los mensajes. En definitiva, se trata de un mensaje que no aporta, normalmente, nada y que no hace otra cosa más que llenar el archivo de log y lo que queremos es que no aparezca en el log.

Para que no aparezcan este tipo de mensajes en consola podemos poner en el web.xml lo siguiente:

<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>

Esta solución, que sólo es válida en entornos de desarrollo, impide que el log se muestre en consola, pero muestra en la parte inferior de las ventanas los mensajes de error/aviso asociados a componentes de la ventana. En entornos de producción, lo correcto es que la configuración de web.xml debe ser:

<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Production</param-value>
</context-param>

Por tanto, la mejor solución es configurar el logger para que no muestre este tipo de mensajes en la consola o en el archivo de trazas. Mojarra utilza la API java.util.logging para su logger. La configuración de este logger se realiza en el archivo logging.properties que se encuentra, por defecto, en JAVA_HOME/jre/lib. El nombre del logger que controla este tipo de trazas comienza por javax.enterprise.resource.webcontainer.jsf. Por tanto, para que los mensajes no aparezcan en las trazas, deberemos añadir una línea como la siguiente en el archivo logging.properties:

javax.enterprise.resource.webcontainer.jsf.level = SEVERE   

Podemos cambiar la ubicación de logging.properties arrancando la máquina virtual asignando un valor apropiado al parámetro

-Djava.util.logging.config.file=

Hay que hacer notar que Tomcat, por defecto, no utiliza el archivo logging.properties que se encuentra en su directorio conf, sino el que se encuentra en JAVA_HOME/jre/lib.