2009-04-09 2 views
8

Я пишу приложение Flex поверх веб-приложения Java с помощью BlazeDS. BlazeDS выполнил вход в систему, но я хочу настроить его на использование той же структуры ведения журнала, что и в моем приложении.Как я могу настроить реализацию BlazeDS с помощью Log4J?

Есть ли способ настроить BlazeDS на использование Log4J? Или я застрял с материалом записи Flex, который уже испечен в BlazeDS?

ответ

13

нет, из коробки BlazeDS не поддерживает log4j или другие структуры непосредственно.

Однако, очень просто добавить поддержку своей любимой системы ведения журнала; Я использовал следующее, чтобы получить выход в 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); 
    } 
} 

.. и использовать его, включите его в services-config.xml:

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

Этот ответ замечательный. Мои комментарии: 1) Мне пришлось переопределить equals() в моем Slf4jTarget, чтобы возвращать true для любого другого экземпляра того же типа, чтобы BlazeDS не регистрировал эту цель дважды 2) Я префикс строки event.logger.getCategory() с "BlazeDS". иметь лучший дескриптор пространства имен при настройке slf4j 3) Я обрезаю сообщения DEBUG до 1000 символов, так как BlazeDS сбрасывает все входящие и исходящие данные – Tom

+0

Также удобно вызвать super() из конструктора – fglez

1

Я не верю, что есть что-то встроенный, что позволяет перенаправлять Blaze DS выход каротаж в log4j, Обще-каротаж и т.д. Однако этот вопрос JIRA может быть полезна для вас:

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

Включает класс Java для перенаправления вывода и примера конфигурации для сервисов-config.xml

4

Используйте CommonsLoggingTarget.

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

Просто будьте осторожны с настройкой уровня журнала в service-config.xml. Если вы установите его на «Все» и определите «блейзер» в log4j.xml, тогда будет много избыточных журнальных сообщений, созданных BlazeDS/LCDS, что может оказать значительное влияние на производительность.

+0

Также есть полезная документация по всем категориям BlazeDS – Tom

Смежные вопросы