2010-10-20 4 views
6

Ich versuche zu konfigurieren log4j in einer Eclipse-Plugin-Projekt mit dem folgenden XML-Property-Datei zu finden, die eine benutzerdefinierte appender umfasst genannt EclipseLoggingAppender: Um diese EigenschaftLog4j keine benutzerdefinierten appender eine Eigenschaft Datei mit

<?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> 

gebe ich Datei an die folgende Anweisung im Code:

DOMConfigurator.configure(filename); 

Aber beim Laden der Anwendung ich die folgende Fehlermeldung erhalten:

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

Wer weiß, was ist das Geschäft? könnte ein Klassenpfadproblem sein? ..

Antwort

1

Ja, dies ist ein Klassenpfadproblem. Log4j sucht nach der Klasse com.lior.ibd.utils.logging.EclipseLoggingAppender. (wahrscheinlich appender, dass jemand in Ihrer Organisation geschrieben?)

Wenn Sie Zeilen entfernen:

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

und

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

log4j sollte damit umgehen.

Oder fügen Sie EclipseLoggingAppender zum Klassenpfad hinzu, indem Sie eine geeignete jar-Datei suchen und zum Klassenpfad hinzufügen. I.e. run

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

Ich möchte diese Zeilen nicht löschen, da ich möchte, dass dieser Appender im Anwendungsframework läuft ... Was meinst du mit " Hinzufügen von EclipseLoggingAppender zum Klassenpfad "? – Protostome

+1

@Protostome - das hängt von Ihrer Umgebung ab. Laufen Sie Ihren Code von der Befehlszeile oder innerhalb des Anwendungsservers oder irgendwie anders? – krtek

+0

Dies ist eine Eclipse RCP-Anwendung – Protostome

1

für Starter können Sie nur ein <root> Element haben. Sie möchten etwas mehr wie

<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> 

Wie haben Sie Ihre benutzerdefinierten Logger zum Klassenpfad hinzugefügt?

+0

Der EclipseLoggingAppender befindet sich in einem anderen Plugin-Projekt und wird in andere Plugins exportiert. Alle Plugins, die das Protokollierungshilfsprogramm verwenden, enthalten dieses Plugin-Projekt in ihrem Abschnitt 'Erforderliches Plugin' ... – Protostome

Verwandte Themen