Consejos sobre los logs en Alfresco

Como muchos ya sabréis, Alfresco utiliza Log4j para los logs. Log4j es una herramienta Open Source para gestionar logs y permite a programadores y administradores controlar lo que ocurre en la aplicación de forma granular y a diferentes niveles de detalle.

Controlar cómo funcionan los logs en Alfresco es la mejor forma de conocer como funciona el sistema tanto para administradores como programadores y poder detectar/solucionar problemas en una instalación.

Se configura mediante un fichero de texto llamado log4j.properties que se encuentra dentro de alfresco.war concretamente en el caso de Tomcat en ${TOMCAT_HOME}/webapps/alfresco/WEB-INF/classes. En este fichero se especifica qué queremos que registre el log y cómo queremos que lo muestre (mayor o menor detalle). También es donde se establece el nombre del fichero de log (alfresco.log) y los ficheros de log anteriores a los que le añade fecha (alfresco.log.YYYY-MM-DD). Estos ficheros de logs generados los encontraremos en la raíz del directorio donde hemos instalado Alfresco también conocido como ${ALFRESCO_HOME}, ojo, ni esta variable ni ${TOMCAT_HOME} existen salvo que se declaren, se usa para indicar el directorio raíz de instalación de Alfresco y de Tomcat respectivamente.

Vamos a ver como cambiar la ubicación del fichero de log de Alfresco. Copiamos el fichero log4j.properties al directorio extension con otro nombre, por ejemplo custom-log4j.properties:

[bash]
# cp ${TOMCAT_HOME}/webapps/alfresco/WEB-INF/classes/log4j.properties ${TOMCAT_HOME}/tomcat/shared/classes/alfresco/extension/custom-log4j.properties
[/bash]

Este cambio nos permitirá tener siempre la misma configuración de logs independientemente de que actualicemos Alfresco y despleguemos un nuevo alfresco.war donde se sobreescribiría la configuración personalizada si la hacemos dentro del war desplegado.

Editamos el fichero custom-log4j.properties y localizamos la línea:

[bash]
log4j.appender.File.File=alfresco.log
[/bash]

para especificar la siguiente:

[bash]
log4j.appender.File.File=/var/log/alfresco/alfresco.log
[/bash]

Como veis, este ejemplo está orientado a un sistema Linux o Unix, hay que tener en cuenta que si queréis poner los logs como he indicado hay que crear el directorio /var/log/alfresco y darle los permisos necesarios para que el usuario con el que se ejecuta Alfresco pueda escribir. También podríais poner los logs en alf_data/logs y así tener todo más centralizado. Para Windows habría que cambiar la ruta absoluta en el siguiente formato, por ejemplo “D:\logs\alfresco\alfresco.log”. Una recomendación de índole general para cualquier aplicativo y sus logs es disponer de una partición independiente encargado de almacenar estos ficheros (generalmente /var/log), de forma que si nos quedamos sin espacio en disco tanto en la aplicación como en los logs, no afecte al funcionamiento y podamos detectarlo de forma anticipada ya sea chequeando manualmente o con un sistema de monitorización, evidentemente también podemos poner una partición dedicada a los logs de Alfresco. Recuerda hacer backup de los logs regularmente.

Para entender mejor la sintaxis y opciones que encontramos en el fichero de configuración os recomiendo leer esta entrada en la Wikipedia. Destacaría el parámetro log4j.appender.File que especifica la rotación diaria del fichero de log y log4j.appender.File.File que permite indicar el nombre y path del fichero de log.

En cuanto a los niveles de detalle es importante conocer que existen los siguientes (de menos a mas detalle): OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE y ALL. Así que hay que tener cuidado con tener DEBUG, TRACE o ALL en un sistema en producción, salvo que sea necesario para solucionar un problema. Aquí puedes ver más información al respecto.

Si usáis un servidor de aplicaciones Tomcat, también es recomendable cambiar la ubicación del fichero de logs de Tomcat (o cualquier otro servidor de aplicaciones soportado), aquí vemos como cambiar el sitio donde se almacena el fichero catalina.out:

Editamos el fichero ${TOMCAT_HOME}/bin/catalina.sh, localizamos las líneas:

[bash]
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
fi
[/bash]

Y cambiamos la ruta de CATALINA_OUT por la ruta deseada:

[bash]
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="/var/log/alfresco/catalina.out"
fi
[/bash]

Para que los cambios anteriores surtan efecto hay que reiniciar el servidor de aplicaciones. Una vez reiniciado ya veremos los ficheros creados en el directorio correspondiente.

Todo lo que hemos visto anteriormente se puede hacer de una forma más sencilla accediendo al servidor con jconsole mediante RMI y sin tener que reiniciar el servidor. En Alfresco Enterprise 3.4 ya está activado el acceso remoto. Aquí expliqué como acceder por jconsole a Alfresco.

Como vemos en la siguiente captura de pantalla, en la sección MBeans podemos encontrar un grupo llamado “log4j” y desplegado podemos ver todas sus opciones.

Concretamente en la captura anterior vemos los “Attributes” del bean “File“, y ahí podemos cambiar las opciones como por ejemplo “file”, el fichero y ruta de log. Una vez cambiado a nuestro gusto, para que tenga efecto vamos a “Operations“, hacemos clic en “activateOptions” y listo.

Por ejemplo, los logs de Webdav por defecto están configurados como detalle tipo “ERROR”, si queremos hacer un análisis más exhaustivo podríamos localizar el bean “org.alfresco.webdav.protocol” y desplegamos el menú “Attributes” y hacemos clic en “priority“, doble clic en “ERROR” para editarlo y lo cambiamos por “DEBUG” (sin comillas), a continuación guardamos simplemente pulsando la tecla “Enter” y ya tendríamos configurado el nivel de log del componente de turno. Fácil ¿no?

Para terminar quiero mencionar este pequeño desarrollo que ha realizado Tjarda Peelen – @tpeelen que permite ver los logs en la propia interfaz de la aplicación. Puede ser útil.

También se podría usar Log4mongo u otras aplicaciones para presentar logs vía web, pero eso ya es otra historia.

¿Algún consejo más? ¡Cualquier comentario es bienvenido!

13 thoughts to “Consejos sobre los logs en Alfresco”

  1. Saludos, tengo una instalación de alfresco para windows que me pidieron configurar.

    Estoy intentando encontrar la forma de dar de alta el servicio de corre entrante y saliente pero no me funciona entonces intento ir al log para ver que es lo que está mal y no puedo encontrar por ninguna parte el archivo alfresco.log

    Ya realicé los pasos que pones en este tutorial para cambiar la ubicación y el nivel de verbose del log pero el archivo alfresco.log sigue sin ser generado.

    Yo no hice la instalación y la verdad es la primera vez que tengo contacto con el sistema de alfresco, alguien podría hecharme una mano por favor????

  2. Hola Agustín, sin saber mucho sobre el estado de la instalación poco podríamos hacer, no sé que librerías se cargan o como está la configuración realmente.

    De todas formas mira en el fichero log4j.properties donde apunta el parámetro log4j.appender.File.File. También puedes ver todos los logs en el fichero catalina.out que debería estar en el directorio de logs de Tomcat (si usas Tomcat).

    Para debug del correo saliente puedes usar este parámetro en log4j.properties:

    log4j.logger.org.alfresco.web.bean.TemplateMailHelperBean=debug

    Saludos.

  3. Hola Toni,

    Lo primero de todo darte la enhorabuena por el fantástico blog y la gran ayuda que proporciona.

    Sobre esta entrada realizarte una cuestión:

    he realizado la configuración para que se genere el afresco.log en /var/log/alfresco y funciona correctamente pero también se genera en el ${ALFRESCO_HOME}.

    ¿A qué puede ser debido? ¿He de cambiar también el log4j.appender.File.File=alfresco.log en el log4j.propierties (algo que solo se debería realizar en el custom-log4j.properties, ¿no?)?

    Muchas gracias.

  4. Hola Antonio,

    Gracias por leer el blog. Sobre lo que comentas de los logs, que versión de Alfresco utilizas? Me acabo de dar cuenta de lo mismo en una instalación que tengo de prueba. Usas el script de arranque del bundle? Parece que se sobre escriben algunas rutas.

  5. Hola Antonio, haz lo mismo con el fichero de configuración de share y lo renombras como share-log4j.properties, mientras para asegurarte puedes hacer una pequeña chapuzilla en el script, añade esto al principio del script:
    #!/bin/sh

    cd directoriodelogs

    # Disabling SELinux if enabled

  6. Hola de nuevo Toni,

    Lo he realizado, con lo que ahora tengo en el extension los dos ficheros:

    custom-log4j.properties
    share-log4j.properties

    Pero sigue apareciendo el alfresco.log (a parte del alfresco.log en /var/log/alfresco) en el ${ALFRESCO_HOME}, que yo creo que es la información del logging del Share.

    ¿Puede ser que en realidad no existe la forma/posibilidad de “extender” el Share?

    Muchas gracias.

  7. excelente el post; una consulta el alfresco me consume demasiado espacio de disco con los archivos logs cuando corre en apache por que puede ser esto?? puedo configurar en algún lugar el tamaño máximo de crecimiento de estos archivos??

  8. Hola, no se si te entiendo bien. Si es apache puedes comprimir los archivos y rotarlos. Logrotate puede hacerlo por ti automáticamente. Si es Tomcat igual puedes rotarlos o incluso rebajar el nivel de log de tomcat-alfresco. Mira también que no te esté consumiendo disco el contentstore-deleted.

    Saludos.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.