No, z BlazeDS box nie obsługuje bezpośrednio log4j lub innych ram.
Jednak bardzo proste jest dodanie obsługi ulubionej struktury logowania; Użyłem następujących czynności, aby uzyskać dane wyjściowe do 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);
}
}
.. i go używać, należy ją włączyć w services-config.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<logging>
<target class="example.Slf4jTarget" level="Info">
</logging>
</services-config>
Ta odpowiedź jest wspaniała. Moje komentarze: 1) Musiałem nadpisać equals() w moim Slf4jTarget, aby zwrócić wartość true dla każdej innej instancji tego samego typu, aby zapobiec dwukrotnemu zarejestrowaniu tego celu przez BlazeDS. 2) Przedimekowałem ciąg znaków event.logger.getCategory() z "BlazeDS." mieć lepszą obsługę przestrzeni nazw podczas konfigurowania slf4j 3) Obcinam komunikaty DEBUG do 1000 znaków, ponieważ BlazeDS zrzuca wszystkie dane wejściowe i wyjściowe. – Tom
Wygodne jest również wywoływanie super() z konstruktora – fglez