2010-10-20 12 views
6

Estoy intentando configurar log4j en un proyecto de plug-in de Eclipse utilizando el siguiente archivo de propiedades XML, que incluye una appender personalizada llamada EclipseLoggingAppender:Log4J no encontrar a medida appender utilizando un archivo de propiedades

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

paso esta propiedad presentar a la siguiente instrucción en el código:

DOMConfigurator.configure(filename); 

Pero cuando se carga la aplicación me sale el siguiente mensaje de error:

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

¿Alguien sabe cuál es el problema? podría ser un problema de ruta de clases? ..

Respuesta

1

Sí, este es un problema de classpath. Log4j está buscando la clase com.lior.ibd.utils.logging.EclipseLoggingAppender. (probablemente appender que escribió alguien en su organización?)

Si quita líneas:

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

y

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

log4j debe manejarlo.

O añadir EclipseLoggingAppender a classpath mediante la localización de un archivo JAR correspondiente y añadirlo a la ruta de clase. Es decir. ejecutar

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

No quiero eliminar esas líneas ya que quiero que este appender se ejecute en el marco de la aplicación ... ¿Qué quiere decir con " ¿Agregar EclipseLoggingAppender al classpath "? – Protostome

+1

@Protostome - depende de su entorno. ¿Está ejecutando su código desde la línea de comandos o dentro del servidor de aplicaciones o de alguna otra manera? – krtek

+0

Esta es una aplicación RCP de eclipse – Protostome

1

para empezar que sólo puede tener un elemento de <root>. Desea algo más como

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

¿Cómo ha agregado su registrador personalizado al classpath?

+0

El EclipseLoggingAppender se encuentra en un proyecto de plug-in diferente, y se exporta a otros plugins. Todos los complementos que usan la herramienta de registro incluyen este proyecto de complemento en su sección 'Complemento obligatorio' ... – Protostome

Cuestiones relacionadas