2010-10-20 12 views
6

Sto cercando di configurare log4j in un progetto plugin di Eclipse utilizzando il seguente file XML di proprietà, che include un appender personalizzata denominata EclipseLoggingAppender:Log4j non trovando personalizzato appender utilizzando un file di proprietà

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

passo questa proprietà presentare la seguente dichiarazione nel codice:

DOMConfigurator.configure(filename); 

Ma quando si carica l'applicazione ottengo il seguente messaggio di errore:

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

Qualcuno sa quale è l'affare? potrebbe essere un problema di classpath? ..

risposta

1

Sì, questo è un problema di classpath. Log4j sta cercando la classe com.lior.ibd.utils.logging.EclipseLoggingAppender. (probabilmente appender che ha scritto qualcuno nella vostra organizzazione?)

Se si rimuovono le linee:

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

e

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

log4j dovrebbe gestirlo.

Oppure aggiungere EclipseLoggingAppender a classpath individuando un file jar appropriato e aggiungendolo al classpath. Cioè run

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

Non voglio rimuovere quelle righe poiché voglio che questo appender sia in esecuzione nel framework dell'applicazione ... Cosa intendi con " Aggiunta di EclipseLoggingAppender al classpath "? – Protostome

+1

@Protostome: dipende dal proprio ambiente. Stai eseguendo il tuo codice dalla riga di comando o all'interno del server delle applicazioni o in qualche altro modo? – krtek

+0

Questa è un'applicazione di eclissi RCP – Protostome

1

per i principianti si può avere solo un elemento <root>. Vuoi qualcosa di più come

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

Come hai aggiunto il tuo registratore personalizzato al classpath?

+0

EclipseLoggingAppender si trova in un altro progetto di plug-in ed è esportato in altri plug-in. Tutti i plug-in che utilizzano l'utilità di registrazione includono questo progetto plug-in nella sezione 'Plug-in richiesto' ... – Protostome

Problemi correlati