2012-09-13 11 views
9

Ich habe eine Java-Klasse, die beim Start einen benutzerdefinierten Classloader basierend auf javassist class loader erstellt und dann die echte Programmklasse ausführt. Ich erhalte die folgende Fehlermeldung:Konfiguriere org.apache.log4j.ConsoleAppender mit benutzerdefiniertem Classloader

log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a   
"org.apache.log4j.Appender" variable. 
log4j:ERROR The class "org.apache.log4j.Appender" was loaded by 
log4j:ERROR [[email protected]] whereas object of type 
log4j:ERROR "org.apache.log4j.ConsoleAppender" was loaded by 
[[email protected]]. 
log4j:ERROR Could not instantiate appender named "stdout". 

Das Problem mit der Tatsache verbunden ist, dass ein Objekt durch die ursprünglichen Klassenlader erstellt wird, während die andere durch die Gewohnheit einer erstellt wird.
Gibt es eine Möglichkeit, diesen Fehler zu beheben?

Vielen Dank im Voraus,
Avner

Antwort

16

Bitte versuchen -Dlog4j.ignoreTCL = true zu setzen, hoffe, es hilft. eine simular Ausgabe about log4j

+1

wie ein Charme ;-) Danke –

0

hinzufügen log4j.ignoreTCL in Maven tomcat Konfiguration Plugin wie in unten

gezeigt
<plugin> 
    <groupId>org.apache.tomcat.maven</groupId> 
    <artifactId>tomcat7-maven-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
     <port>${local.server.port}</port> 
     <update>true</update> 
     <systemProperties> 
     <log4j.configurationFile>${user.dir}\conf\log4j2.xml</log4j.configurationFile> 
     <log4j.ignoreTCL>true</log4j.ignoreTCL> 
     <java.util.logging.manager>org.apache.logging.log4j.jul.LogManager</java.util.logging.manager> 
     </systemProperties> 
     <contextReloadable>true</contextReloadable> 
    </configuration> 
</plugin> 
Verwandte Themen