2009-04-09 11 views
8

Tôi đang viết một ứng dụng Flex trên đầu trang của một ứng dụng web Java sử dụng BlazeDS. BlazeDS đã đăng nhập bên trong nó, nhưng tôi muốn thiết lập nó để sử dụng cùng một khung công tác ghi nhật ký mà tôi có trong ứng dụng của mình.Làm cách nào để thiết lập triển khai BlazeDS của tôi với Log4J?

Có cách nào để thiết lập BlazeDS sử dụng Log4J không? Hoặc tôi bị mắc kẹt với các công cụ đăng nhập Flex đã được nướng vào BlazeDS?

Trả lời

13

không, ra khỏi BlazeDS hộp không hỗ trợ log4j hoặc các khuôn khổ khác trực tiếp.

Tuy nhiên, việc thêm hỗ trợ cho khung đăng nhập yêu thích của bạn thật sự đơn giản; Tôi đã sử dụng sau đây để nhận được đầu ra vào 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); 
    } 
} 

.. và sử dụng nó, kích hoạt nó trong services-config.xml:

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

Câu trả lời này thật tuyệt vời. Ý kiến ​​của tôi: 1) Tôi đã phải ghi đè bằng() trong mục tiêu Slf4jTarget của tôi để trả về true cho bất kỳ thể hiện nào khác cùng loại để ngăn BlazeDS đăng ký mục tiêu đó hai lần 2) Tôi bắt đầu chuỗi event.logger.getCategory() với "BlazeDS." để xử lý không gian tên tốt hơn khi định cấu hình slf4j 3) Tôi cắt bớt các thông báo DEBUG thành 1000 ký tự vì BlazeDS đổ tất cả dữ liệu trong và ngoài – Tom

+0

Nó cũng thuận tiện để gọi super() từ hàm tạo – fglez

1

Tôi không tin rằng có được bất cứ điều gì built-in cho phép bạn chuyển hướng Blaze DS khai thác gỗ ra để Log4j, commons-logging, vv Tuy nhiên vấn đề JIRA này có thể được sử dụng cho bạn:

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

Bao gồm một lớp Java để chuyển hướng đầu ra và mẫu cấu hình cho dịch vụ-config.xml

4

Sử dụng CommonsLoggingTarget.

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

Chỉ cần cẩn thận với việc đặt mức nhật ký trong service-config.xml. Nếu bạn đặt nó thành "Tất cả", và xác định logger "blazeds" trong log4j.xml, thì sẽ có rất nhiều thông điệp tường trình dư thừa được tạo ra bởi BlazeDS/LCDS, có thể có tác động hiệu suất đáng kể.

+0

Cũng có tài liệu hữu ích về tất cả các loại BlazeDS – Tom