2010-10-20 1 views
6

Tôi đang cố gắng để cấu hình log4j trong một dự án Eclipse plugin bằng cách sử dụng tập tin bất động sản XML sau, trong đó bao gồm một appender tùy chỉnh được gọi EclipseLoggingAppender:Log4j không tìm thấy tùy chỉnh appender sử dụng một tập tin bất động sản

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true"> 
    <appender name="eclipseErrorView" class="com.lior.ibd.utils.logging.EclipseLoggingAppender"/> 

<appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
    </layout> 
    </appender> 

    <root> 
    <priority value ="debug" /> 
    <appender-ref ref="console" /> 
    </root> 
    <logger name="com.lior"> 
    <level value ="warn" /> 
    <appender-ref ref="eclipseErrorView" /> 
    </logger> 

</log4j:configuration> 

tôi vượt qua khách sạn này nộp để báo cáo kết quả sau đây trong các mã:

DOMConfigurator.configure(filename); 

Nhưng khi tải ứng dụng tôi nhận được thông báo lỗi sau:

log4j:ERROR Could not create an Appender. Reported error follows. 
java.lang.ClassNotFoundException: com.lior.ibd.utils.logging.EclipseLoggingAppender 

Bất kỳ ai biết thỏa thuận là gì? có thể là sự cố classpath? ..

Trả lời

1

Có, đây là sự cố classpath. Log4j đang tìm lớp com.lior.ibd.utils.logging.EclipseLoggingAppender. (có lẽ appender đó đã viết một ai đó trong tổ chức của bạn?)

Nếu bạn loại bỏ dòng:

<appender name="eclipseErrorView" class="com.lior.ibd.utils.logging.EclipseLoggingAppender"/> 

<logger name="com.lior"> 
    <level value ="warn" /> 
    <appender-ref ref="eclipseErrorView" /> 
</logger> 

log4j nên xử lý nó.

Hoặc thêm EclipseLoggingAppender vào đường dẫn lớp bằng cách định vị tệp jar thích hợp và thêm tệp đó vào đường dẫn lớp. I E. chạy

java -cp appender.jar com.mypackage.MyClass 
+0

Tôi không muốn xóa những dòng này vì tôi muốn ứng dụng này chạy trong khung ứng dụng ... Ý của bạn là gì? " Thêm EclipseLoggingAppender vào classpath "? – Protostome

+1

@Protostome - nó phụ thuộc vào môi trường của bạn. Bạn đang chạy mã của bạn từ dòng lệnh hoặc trong máy chủ ứng dụng hoặc bằng cách nào đó khác? – krtek

+0

Đây là ứng dụng RCP nhật thực – Protostome

1

cho người mới bắt đầu, bạn chỉ có thể có một yếu tố <root>. Bạn muốn một cái gì đó giống như

<appender name="eclipseErrorView" class="com.mypackage.EclipseLoggingAppender"> 
    <filter class="org.apache.log4j.varia.LevelRangeFilter Source code of org.apache.log4j.varia.LevelRangeFilter"> 
    <param name="LevelMin" value="WARN" /> 
    </filter> 
</appender> 

<root> 
    <priority value ="debug" /> 
    <appender-ref ref="console" /> 
    <appender-ref ref="eclipseErrorView" /> 
</root> 

Bạn đã thêm trình ghi tùy chỉnh của mình vào đường dẫn lớp như thế nào?

+0

EclipseLoggingAppender nằm trong một dự án plugin khác và được xuất sang các plugin khác. Tất cả các plugin sử dụng tiện ích ghi nhật ký bao gồm dự án plugin này trong phần 'Plugin yêu cầu' của họ ... – Protostome