2009-04-09 8 views
8

Escribo una aplicación Flex encima de una aplicación web Java usando BlazeDS. BlazeDS tiene un inicio de sesión, pero quiero configurarlo para Usar el mismo marco de trabajo de registro que tengo en mi aplicación.¿Cómo puedo configurar mi implementación de BlazeDS con Log4J?

¿Hay alguna manera de configurar BlazeDS para usar Log4J? ¿O estoy atrapado con el material de registro de Flex que ya está cocido en BlazeDS?

Respuesta

13

no, fuera de la caja BlazeDS no soporta log4j u otros marcos directamente.

Sin embargo, es realmente simple agregar soporte para su marco de registro favorito; He utilizado el siguiente para obtener la salida en SLF4J:

package example; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

import flex.messaging.log.AbstractTarget; 
import flex.messaging.log.LogEvent; 

public class Slf4jTarget extends AbstractTarget { 
    // log4j levels: OFF - FATAL - ERROR - WARN - INFO - DEBUG - TRACE - ALL 
    // blazeds levels: NONE - FATAL - ERROR - WARN - INFO - DEBUG - ALL 

    @Override 
    public void logEvent(LogEvent event) { 
     Logger log = LoggerFactory.getLogger(event.logger.getCategory()); 

     if (event.level >= LogEvent.ERROR) 
      log.error(event.message, event.throwable); 
     else if (event.level >= LogEvent.WARN) 
      log.warn(event.message, event.throwable); 
     else if (event.level >= LogEvent.INFO) 
      log.info(event.message, event.throwable); 
     else if (event.level >= LogEvent.DEBUG) 
      log.debug(event.message, event.throwable); 
     else 
      log.trace(event.message, event.throwable); 
    } 
} 

.. y usarlo, habilitarlo en services-config.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<services-config> 
    <logging> 
     <target class="example.Slf4jTarget" level="Info"> 
    </logging> 
</services-config> 
+0

Esta respuesta es genial. Mis comentarios: 1) Tuve que anular equals() en mi Slf4jTarget para devolver verdadero para cualquier otra instancia del mismo tipo para evitar que BlazeDS registre ese objetivo dos veces 2) Prefijo la cadena event.logger.getCategory() con "BlazeDS". tener un mejor identificador de espacio de nombres al configurar slf4j 3) trunco ​​los mensajes DEBUG a 1000 caracteres ya que BlazeDS vuelca todos los datos entrantes y salientes – Tom

+0

También es conveniente llamar a super() desde el constructor – fglez

1

no creo que no está incorporado en cualquier cosa que le permite redirigir salida de registro Blaze DS para LOG4J, commons-logging, etc. Sin embargo este problema JIRA pueden ser de utilidad para usted:

http://jira.springframework.org/browse/FLEX-18

incluye una clase Java para redirigir configuración de salida y la muestra para los servicios-config.xml

4

Uso CommonsLoggingTarget.

Ver http://static.springsource.org/spring-flex/docs/1.0.x/javadoc-api/org/springframework/flex/core/CommonsLoggingTarget.html.

Solo tenga cuidado al configurar el nivel de registro en service-config.xml. Si lo configura en "Todo" y define el registrador "blazeds" en log4j.xml, habrá una gran cantidad de mensajes de registro redundantes generados por BlazeDS/LCDS, lo que podría tener un impacto significativo en el rendimiento.

+0

También tiene documentación útil sobre todas las categorías de BlazeDS – Tom

Cuestiones relacionadas