Utilizar LogAtica en las Aplicaciones

LogAtica esta compuesta por:

  • Un sistema que permite enviar log a BBDD de forma asíncrona, enviando mensajes a una cola JMS. Esta cola JMS es procesada por la propia aplicación de LogAtica, guardando los datos en la BBDD.
  • Una aplicación que permite explotar el log almacenado en la BBDD.

Los datos que se pueden obtener de LogAtica son:

  • Información sobre la sesión del usuario: cuando se conecto y cuando se cerro la sesión.
  • User Agent: Ver desde que dispositivo se conecto, la versión del navegador y del sistema operativo.
  • Los login y logouts asociados a una sesión.
  • Las paginas accedidas en una sesión.
  • El log asociado a una página.

La aplicación la estamos migrando actualmente a FundeWeb 2, por lo que no estará disponible hasta al menos hasta el 31 de Julio.

Para utilizar la nueva versión de LogAtica en nuestras aplicaciones, solo hay que seguir los siguientes pasos:

FundeWeb 2.0
  • Abrir el fichero POM principal del proyecto y cambiar la versión del <parent> a 2.0.11 (si es superior no modificar, si es inferior, añadir en la etiqueta <properties> la propiedad siguiente <project.build.sourceEncoding>ISO-8859-1project.build.sourceEncoding>). (No necesario si se a creado con el arquetipo 0.0.6 o posterior).
  • Abrir el fichero POM del módulo WEB y añadir la siguiente dependencia, justo después de la dependencia de fundeweb-jpa (No necesario si se a creado con el arquetipo 0.0.6 o posterior):
		<dependency>
			<groupId>es.um.atica.fundeweb</groupId>
			<artifactId>fundeweb-log4j</artifactId>
		</dependency>
FundeWeb 1.5
  • Abrir el fichero POM principal del proyecto y cambiar la versión del <parent> al menos a la versión 1.5.19.
  • Abrir el fichero POM del módulo EJB y añadir la siguiente dependencia, justo después de la dependencia de fundeweb-jpa:
		<dependency>
			<groupId>org.um.atica.fundeweb-legacy</groupId>
			<artifactId>fundeweb-log4j</artifactId>
		</dependency>
  • Abrir el fichero POM del módulo WEB y añadir la siguiente dependencia, justo después de la dependencia de fundeweb-casclient:
		<dependency>
			<groupId>org.um.atica.fundeweb-legacy</groupId>
			<artifactId>fundeweb-log4j</artifactId>
			<scope>provided</scope>
		</dependency>

Continuamos para toda versión de FundeWeb.

  • Editar el fichero log4j.xml que esta en la carpeta src/main/resources del módulo WEB y añadimos la etiqueta <renderer> justo después de la etiqueta raíz <log4j:configuration>:
<log4j:configuration ...>
 
	<renderer renderedClass="es.um.atica.logatica.messages.LogAticaMessage"
		renderingClass="es.um.atica.logatica.renderers.LogAticaMessageRenderer"/>
 
</log4j:configuration>
  • En el fichero log4j.xml, buscamos el appender con nombre fichero y le añadimos después del cierre de la etiqueta <layout>, la etiqueta <filter>:
<log4j:configuration ...>
 
	...
 
	<appender name="fichero" class="org.apache.log4j.rolling.RollingFileAppender">
		<rollingPolicy name="file"
			class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
			<param name="FileNamePattern"
				value="${log.directory.path}/${log.rolled.directory.path}/${log.file.name}.%d{yyyy-MM-dd-HH-mm}.log.gz" />
			<param name="ActiveFileName" value="${log.directory.path}/${log.file.name}.log" />
		</rollingPolicy>
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="%d{DATE} %5p %c{1}:%L - Usuario: %X{username} - %m%n" />
		</layout>
 
		<filter class="es.um.atica.logatica.filters.LogAticaMessageFilter"/>
	</appender>
 
	...
 
</log4j:configuration>
  • En el fichero components.xml, añadimos el espacio de nombres para JMS sino esta definido y la localización del XSD en la propiedad xsi:schemaLocation.
FundeWeb 2.0
<components xmlns="http://jboss.com/products/seam/components"
            ...
            xmlns:jms="http://jboss.org/schema/seam/jms"
	xsi:schemaLocation="
                            ...
                            http://jboss.org/schema/seam/jms http://jboss.org/schema/seam/jms-2.3.xsd">
    ...
 
</components >
FundeWeb 1.5
<components xmlns="http://jboss.com/products/seam/components"
            ...
            xmlns:jms="http://jboss.com/products/seam/jms"
	xsi:schemaLocation="
                            ...
                            http://jboss.com/products/seam/jms http://jboss.com/products/seam/jms-2.2.xsd">
    ...
 
</components >

Continuamos para todas las versiones de FundeWeb.

  • Añadimos antes del cierre de la etiqueta <components> lo siguiente:
<components xmlns="http://jboss.com/products/seam/components"
	...>
    ...
 
    <component name="es.um.atica.logatica.logAticaEvents" class="es.um.atica.logatica.LogAticaEvents">
        <property name="applicationId">1</property>
    </component>
 
    <jms:managed-queue-sender name="logAticaQueueSender" queue-jndi-name="jms/LogAticaQueue" />
    <jms:queue-connection queue-connection-factory-jndi-name="jms/LogAticaConnectionFactory" />
 
</components>
  • En la propiedad applicationId hay que poner el código de la aplicación en LogAtica.
  • Para que una evento sea enviado a LogAtica, solo tenemos que utilizar la clase LogAticaMessage, pasando el mensaje y los parámetros a sustituir. El siguiente ejemplo muestra como mandar el mensaje de log a LogAtica y que ademas se añada al resto de appenders.
package action.session;
 
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.log.Log;
 
import es.um.atica.logatica.messages.LogAticaMessage;
 
@Name( "pruebaBean" )
public class PruebaBean {
 
    @Logger
    private Log log;
 
 
    public String lanzaPrueba() {
        log.info( LogAticaMessage.newInstance("Prueba de Logatica: #0 - #1", "Prueba", true));
        return null;
    }
 
    public String lanzaPruebaError() {
        try {
            // codigo con error
        } catch (Exception ex) {
            log.error( LogAticaMessage.newInstance("Prueba de Logatica: #0 - #1", "Prueba", true), ex);
        }
        return null;
    }
}
  • Para mandar el mensaje de log a LogAtica y que no se añada al resto de appenders, solo tenemos que poner un valor false como primer parámetro del constructor de LogAticaMessage. Veamos unos ejemplos:
package action.session;
 
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.log.Log;
 
import es.um.atica.logatica.messages.LogAticaMessage;
 
@Name( "pruebaBean" )
public class PruebaBean {
 
    @Logger
    private Log log;
 
 
    public String lanzaPrueba() {
        log.info( LogAticaMessage.newInstance(false, "Prueba de Logatica: #0 - #1", "Prueba", true));
        return null;
    }
 
    public String lanzaPruebaError() {
        try {
            // codigo con error
        } catch (Exception ex) {
            log.error( LogAticaMessage.newInstance(false, "Prueba de Logatica: #0 - #1", "Prueba", true), ex);
        }
        return null;
    }
}

JUAN MIGUEL BERNAL GONZALEZ 2015/07/08 11:42

  • fdw2.0/fundeweb2.0/gt/logatica.txt
  • Última modificación: 07/11/2017 10:46
  • (editor externo)