代码之家  ›  专栏  ›  技术社区  ›  Protostome

Log4j未使用属性文件找到自定义附加程序

  •  7
  • Protostome  · 技术社区  · 15 年前

    我正试图在Eclipse插件项目中使用以下XML属性文件配置log4j,该文件包括一个名为eclipseeloggingappender的自定义附加程序:

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

    我将此属性文件传递给代码中的以下语句:

    DOMConfigurator.configure(filename);
    

    但在加载应用程序时,我会收到以下错误消息:

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   krtek    15 年前

    是的,这是一个类路径问题。Log4j正在寻找类com.lior.ibd.utils.logging.eclipseseloggingappender。 (可能是在你的组织里给某人写信的附录?)

    如果删除行:

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

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

    log4j应该处理。

    java -cp appender.jar com.mypackage.MyClass
    
        2
  •  1
  •   Brad Mace Mike King    15 年前

    首先你只能有一个 <root> 元素。你想要更像

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