« Atrás

Configuración de log para JBoss 5.1

Este artículo describe los conceptos más importantes que nos permitirán entender y manejar el sistema de log para el servidor de aplicaciones JBoss versión 5.1. Se describen las siguientes operaciones:

  1. Rolling el fichero de log.
  2. Limitar la generación de log.
  3. Añadir log a una aplicación.
  4. Definir un nuevo fichero de log.

Introducción

El servidor de aplicaciones JBoss utiliza log4j para llevar a cabo el proceso de log. El fichero de configuración asociado se encuentra en la carpeta $JBOSS/server//conf y se llama jboss-log4j.xml. Define un comportamiento por defecto que se podrá modificar editando este fichero.

Las operaciones más habituales son:

  1. Rolling el fichero de log.
  2. Limitar la generación de log.
  3. Añadir log a una aplicación.
  4. Definir un nuevo fichero de log.

Esta configuración por defecto se encuentra definida en el fichero jboss-service.xml de JBoss:

...
<!-- =================================================== -->
<!-- Log4j Initialization -->
<!-- =================================================== -->
<mbean code="org.jboss.logging.Log4jService" name="jboss.system:type=Log4jService,service=Logging"

xmbean-dd="resource:xmdesc/Log4jService-xmbean.xml">
<attribute name="ConfigurationURL"><strong>resource:jboss-log4j.xml</strong></attribute>
<attribute name="Log4jQuietMode">true</attribute>
<attribute name="RefreshPeriod">60</attribute>
     
<attribute name="DefaultJBossServerLogThreshold">
INFO
</attribute>
</mbean>

Fichero jboss-log4j.xml

Como se ha comentado antes, este fichero se encarga de definir el comportamiento de log dentro del servidor de aplicaciones JBoss. En este fichero podemos encontrar: dos appenders (uno para consola y otro para fichero) y distintas categorías.

Appender para consola

<appender name="CONSOLE"
class="org.apache.log4j.ConsoleAppender">
<errorHandler
class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="Target" value="System.out"/>
<param name="Threshold" value="INFO"/>

<layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
</layout>
</appender>

 

Como se puede ver, identifica logs de nivel INFO o superior, tales como entradas de tipo warning o errores y define un patrón de layout.

Appender para un fichero

<appender name="FILE"
   class="org.jboss.logging.appender.DailyRollingFileAppender">
  <errorHandler
          class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
  <param name="File" value="${jboss.server.log.dir}/server.log"/>
  <param name="Append" value="true"/>
  <param name="DatePattern" value="'.'yyyy-MM-dd"/>
  <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n"/>
  </layout>
</appender>

Este appender ha sido implementado mediante la clase DailyRollingFileAppender, a partir de la cuál se definen:

  1. La ruta donde se encuentra el fichero de log mediante el parámetro File.
  2. El parámetro Append a true implica que cuando se reinicia el servidor se sigue utilizando el mismo fichero añadiendo al final.
  3. El parametro DatePattern permite definir un formato para las fechas.
  4. ...

Categorías

Se definen una serie de categorías por defecto:

...
<category
   name="javax.enterprise.resource.webcontainer.jsf">
   <priority value="INFO"
       class="org.jboss.logging.log4j.JDKLevel"/>
</category>
<category name="org.jgroups">
      <priority value="WARN"/>
</category>
  
<category name="org.quartz">
      <priority value="INFO"/>
</category>
...

Una vez descritos los elementos más importante para controlar el log en el servidor JBoss vamos a pasar a describir las operaciones más comunes a la hora de configurarlo.

Modificar el appender de fichero para trabajar en entornos de producción

Por defecto, el fichero de log se crea cada vez que se arranca el servidor y crece hasta que el servidor se para o se alcanza la media noche.

    <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
        ...
    </appender>

Este comportamiento, aunque apropiado para entornos de desarrollo, NO lo es para entornos de producción.
En producción, se debe especificar un fichero de log que crea uno nuevo cada vez que se llega a un determinado tamaño.

Se debe modificar el appender de fichero que se esté utilizando. Comentar el appender de fichero que tiene por defecto e incluir el siguiente:

   <appender name="FILE" class="org.jboss.logging.appender.RollingFileAppender">
     <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
     <param name="File" value="${jboss.server.log.dir}/server.log"/>
     <param name="Append" value="false"/>
     <param name="MaxFileSize" value="2KB"/>
     <param name="MaxBackupIndex" value="3"/>

     <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
     </layout>        
   </appender>


La configuración que se propone en este último ejemplo implica:

  1. Tamaño máximo del fichero de log: 2MB.
  2. Cada vez que el servidor arranca se sobrescribe el fichero, es decir, no se hace appender.
  3. Se guardan 3 ficheros de log.

Configuración de log para una aplicación propia

Ésta será una operación muy habitual. Supongamos que nuestras clases se encuentran organizadas dentro del paquete es.ematiz.
Queremos hacer log de todos los mensajes de nivel DEBUG o superior. Se edita el fichero jboss-log4j.xml incluyendo una nueva categoría:

 ...
 <category name="es.ematiz">
   <priority value="DEBUG"/>
 </category>
 ...

Una vez hecho esto se defini un nuevo fichero de log para la aplicación. Para ello tenemos que añadir un nuevo appender:

<appender name="NUEVOAPPENDER" ...>
  <errorHandler class="...” />
  <param name="File"
    value="${jboss.server.log.dir}/Fichero.log"/>
  <param name="Append" value="true"/>
...
</appender>


Y finalmente, referenciar este appender desde la categoría asociada a la aplicación que ha sido creada previamente.

<category name="es.ematiz">
      <priority value="DEBUG"/>
      <appender-ref ref="NUEVOAPPENDER" />
</category>

Una vez llevados a cabo los pasos anteriormente descritos tendremos un fichero donde aparecerá toda la información de log asociada a las clases que se encuentren en el paquete es.ematiz con un nivel de prioridad DEBUG o superior.

Comentarios
URL de Trackback:

comments powered by Disqus