Sep 182014
 
Artículo Java

En un servidor Tomcat, los eventos que se generan quedan registrados en ficheros de log de accesos y logs de errores. Estos ficheros crecen con el tiempo, y pueden llegar a ocupar un espacio considerable en el disco, por lo que es necesario realizar un mantenimiento periódico de los mismos.

En este artículo se expone la manera de configurar un procedimiento automatizado para la rotación y compresión de estos ficheros, y la eliminación de ficheros antiguos, en un sistema Linux.

Ficheros de log generados por Tomcat

En una instalación por defecto, el el contenedor Tomcat 7 se encuentra en el directorio /usr/share/tomcat7. Bajo este directorio se encuentra el directorio que contiene los ficheros de configuración /usr/share/tomcat7/conf, y el directorio en el que se graban los ficheros de log /usr/share/tomcat7/logs.

Examinando el directorio logs podemos ver que se generan distintos tipos de fichero:

  • catalina.out – Este es el fichero en el que se graba todo lo que escriban en System.out/System.err los programas que se ejecutan bajo el contenedor Tomcat. Por defecto, no se realiza la rotación ni la compresión de este fichero
  • catalina.YYYY-MM-DD.log – La salida que se graba en catalina.out también se graba en estos ficheros, que por defecto tienen una rotación de un día, pero no se comprimen ni se eliminan los más antiguos.
  • localhost_access_log.YYYY-MM-DD.txt – Este es el fichero de logs de accesos de la aplicación por defecto “localhost”. Este fichero utiliza el mismo formato empleado por otros servidores web (p.ej., Apache web server) para sus logs de accesos.
  • localhost.YYYY-MM-DD.log – Fichero de log de eventos de la aplicación “localhost” (equivalente al fichero “error_log” del servidor web apache)
  • manager.YYYY-MM-DD.log – Fichero de log de eventos de la aplicación “manager”
  • host_manager.YYYY-MM-DD.log – Fichero de log de eventos de la aplicación “host_manager”

Rotación de catalina.out

La manera más sencilla de realizar la rotación de este fichero es utilizar el servicio logrotate disponible en un sistema Linux: Simplemente creamos un fichero /etc/logrotate.d/tomcat, con el siguiente contenido:

/usr/share/tomcat7/logs/catalina.out {
    copytruncate
    daily
    dateext
    rotate 14
    compress
    missingok
    size 20M
    }

Con esto, realizamos una rotación diaria del fichero, comprimiendo el fichero del día anterior, y manteniendo los últimos 14 ficheros. Por otra parte, la rotación no se realizará si el fichero tiene un tamaño inferior a 20 MBytes.

Rotación del fichero de log de accesos

A diferencia de catalina.out, los ficheros de log de accesos localhost_access_log.*.txt son rotados diariamente por defecto. En el fichero de configuración tomcat7/conf/server.xml podemos encontrar el elemento “Valve” en donde se encuentra la especificación de este comportamiento:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

Para poder aplicar la misma solución que hemos utilizado con catalina.out, debemos modificar esta especificación añadiendo el atributo rotatable="false", y eliminando el punto en la definición del atributo suffix:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix="txt" rotatable="false"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

De esta manera, tras reiniciar el contenedor tomcat, el fichero de log para a llamarse “localhost_access_log.txt” y tomcat no realiza la rotación diaria del mismo. Con esto, basta con añadir al fichero /etc/logrotate.d/tomcat la configuración deseada para la rotación de este fichero de log de accesos. Por ejemplo:

/usr/share/tomcat7/logs/localhost_access_log.txt {
    copytruncate
    daily
    dateext
    rotate 14
    compress
    missingok
    size 20M
    }

Como se puede ver, en este ejemplo hemos utilizado una configuración idéntica a la utilizada para el fichero catalina.out, aunque naturalmente podemos modificar cualquiera de ellas como queramos, de manera totalmente independiente.

Rotación de los ficheros de log de eventos

La configuración de los ficheros de eventos se encuentra en el fichero tomcat7/conf/logging.properties. Por ejemplo, el que corresponde a la aplicación “localhost” está configurado por defecto como:

2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.

Para aplicar la misma solución que hemos utilizado anteriormente, debemos modificar esta configuración de la siguiente forma, añadiendo “rotatable=false”, y eliminado el punto en el valor de prefix:

2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost
2localhost.org.apache.juli.FileHandler.rotatable = false

Tras modificar del mismo modo la configuración de los ficheros de log de eventos de las aplicaciones manager, host-manager y catalina, y reiniciar el contenedor tomcat, podemos comprobar que los nuevos ficheros de log se denominan simplemente “localhost.log”, “manager.log”, etc.

Con esto, ya sólo queda añadir al fichero /etc/logrotate.d/tomcat la configuración deseada para la rotación y compresión de estos ficheros, y para la eliminación de ficheros antiguos:

/usr/share/tomcat7/logs/catalina.log
/usr/share/tomcat7/logs/manager.log
/usr/share/tomcat7/logs/host-manager.log
/usr/share/tomcat7/logs/localhost.log
   {
    copytruncate
    daily
    dateext
    rotate 7
    compress
    missingok
    size 20M
    }

Referencias

 Publicado por en 6:02 pm

 Deja un comentario

(requerido)

(requerido)