2009-04-09 17 views
8

Sto scrivendo un'app Flex su un'applicazione Web Java utilizzando BlazeDS. BlazeDS ha la registrazione al suo interno, ma io voglio configurarlo per utilizzare lo stesso framework di registrazione che ho nella mia applicazione.Come posso configurare la mia implementazione BlazeDS con Log4J?

C'è un modo per impostare BlazeDS per utilizzare Log4J? O sono bloccato con il materiale di registrazione Flex già cotto in BlazeDS?

risposta

13

No, fuori della scatola BlazeDS non supporta log4j o di altre misure direttamente.

Tuttavia, è molto semplice aggiungere il supporto per il tuo framework di registrazione preferito; Ho usato il seguente per ottenere l'output in 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); 
    } 
} 

.. e di usarlo, abilitarlo in services-config.xml:

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

Questa risposta è ottima. I miei commenti: 1) Ho dovuto eseguire l'override di equals() nel mio Slf4jTarget per restituire true per qualsiasi altra istanza dello stesso tipo per impedire a BlazeDS di registrare quel target due volte 2) Ho prefisso la stringa event.logger.getCategory() con "BlazeDS". per gestire meglio lo spazio dei nomi durante la configurazione di slf4j 3) Troncare i messaggi DEBUG a 1000 caratteri poiché BlazeDS scarica tutti i dati in entrata e in uscita – Tom

+0

È anche conveniente chiamare super() dal costruttore – fglez

1

Non credo che ci sia qualcosa built-in che consente di reindirizzare Blaze DS output della registrazione di log4j, commons-logging, ecc, tuttavia questo problema JIRA può essere utile a voi:

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

Include una classe Java per reindirizzare la configurazione di uscita e di esempio per i servizi-config.xml

4

Usa CommonsLoggingTarget.

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

Basta fare attenzione con l'impostazione del livello di registro in service-config.xml. Se lo si imposta su "Tutti" e si definisce il logger "blazeds" in log4j.xml, allora ci saranno molti messaggi di log ridondanti generati da BlazeDS/LCDS, che potrebbero avere un impatto significativo sulle prestazioni.

+0

Ha anche una documentazione utile su tutte le categorie BlazeDS – Tom

Problemi correlati