Configuración de logging global en Java

19 02 2009
Duke, the Java Mascot, in the waving pose. Duk...
Image via Wikipedia

Hoy me he pasado unas cuantas horas peleándome con una tontería. La típica cosa que cuando ves lo que es te da una rabia infinita 😛

Aunque en el pasado había trabajado bastante con JBoss AS aún no me había dado tiempo a probar la versión 5 que se liberó en diciembre, así que he decidido utilizarlo para un pequeño proyectito y así tener la excusa de ver qué novedades presenta.

Mi sorpresa ha sido que al ponerlo en marcha se ha puesto a sacar tal cantidad de información de logging por la consola que el pobre ha tardado más de 10 minutos en arrancar. Cara de póquer. Como me conozco el servidor, me voy a ver la configuración de logging del mismo que está en:

JBOSS_HOME/server/default/conf/jboss-log4j.xml

Si no recuerdo mal en anteriores versiones el fichero se llamaba a secas log4j.xml, pero al echarle un vistazo su estructura es la misma que en versiones anteriores. Sigue utilizando log4j en vez de la api de logging de de la JSE y por defecto configura dos appenders: uno de consola con límite en el nivel WARN y otro de fichero.

Ahora sí que no entendía nada: ¿cómo es posible que la consola esté sacando tanto mensaje de logging y además con un nivel TRACE cuando la configuración limita al nivel a WARN?

Sigo investigando y compruebo que la información de logging que se corresponde con lo que yo voy configurando en dichero fichero sale por la salida estándar y que los mensajes «okupas» en realidad están saliendo por el canal de error… Además otros dos detalles, estos mensajes se corresponden con clases de la JSE y no tienen el mismo formato (pattern) que el resto de mensajes… Es más, parece que tienen formato del paquete de logging estándar de JSE…

Fallo localizado, tengo activado el logging estándar de la JSE (javax.util.logging) al nivel más alto. Ahora sólo falta averiguar por qué. Tras probar una serie de cosas estrambóticas, el fallo estribaba en que en algún momento (que no logro recordar) había cambiado la configuración global del logging estándar; ¿cómo se hace esto? Editando un fichero que se encuentra en la carpeta lib de la JRE instalada, en particular:

JAVA_HOME/jre/lib/logging.properties

En dicho fichero tenía establecido lo que llaman el «Default global logging level» a ALL. Al cambiarlo a WARNING todo volvió a la normalidad.

../..
# Default global logging level.
# This specifies which kinds of events are logged across
# all loggers.  For any given facility this global level
# can be overriden by a facility specific level
# Note that the ConsoleHandler also has a separate level
# setting to limit messages printed to the console.
.level= WARNING
../..
Reblog this post [with Zemanta]

Acciones

Information

2 responses

19 02 2009
robert

Loggar o no loggar, esa es la cuestion … q follon con el logging !!!

Seguro q algun hacker te cambio el log-level sin que te dieras cuenta … pero aun asi, 10 mins ??? uffff

Bueno, al menos ya lo tienes solucionado ! Que novedades tiene la nueva version de jboss ?

20 02 2009
Iván Párraga García

Aún no me ha dado tiempo a trastear mucho, pero diría que desde el punto de vista del usuario han mantenido mucho lo que había (los archivos de configuración y los scripts se llaman igual y la jerarquía de directorios es la misma). Las herramientas administrativas también son muy paracidas.

Se supone que han hecho un gran refactoring interno para hacerlo mucho más modular y además ahora se trata de un JEE 1.5 compliant server.

Seguiré investigando.

Deja un comentario