1.我用Myeclipse建了一个log4j.properties,文件放在了WebRoot/properties/目录下:
log4j.rootLogger=DEBUG,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.TTCCLayout
2.建了个servlet文件,内容:
package validateservlet;
import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.log4j.PropertyConfigurator;
public class Log4JInit extends HttpServlet {
 public void init() {  
String prefix =  getServletContext().getRealPath("/");
String file = getInitParameter("log4j");
prefix=prefix.replace("\\", "/");
System.out.println("................log4j start"+prefix+file);
if(file != null) {
  PropertyConfigurator.configure(prefix+file);
}
  }
public void doGet(HttpServletRequest req, HttpServletResponse res) {
  }
}4.web.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
   <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>Log4JInit</servlet-name>
    <servlet-class>validateservlet.Log4JInit</servlet-class>
    <init-param>
        <param-name>log4j</param-name> 
        <param-value>properties/log4j.properties</param-value> 
    </init-param>
    <load-on-startup>1</load-on-startup>    
  </servlet>   <servlet-mapping>
    <servlet-name>Log4JInit</servlet-name>
    <url-pattern>/servlet/Log4JInit</url-pattern>
  </servlet-mapping>
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 <login-config>
  <auth-method>BASIC</auth-method>
 </login-config>
</web-app>
5.现启动服务器现报错如下:
2008-12-25 11:59:51 org.apache.catalina.core.AprLifecycleListener init
信息: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\MyEclipse 7.0M1\bin;C:\Program Files\MyEclipse 7.0M1\eclipse\dropins\myeclipse\eclipse\plugins\com.genuitec.eclipse.easie.tomcat.myeclipse_6.9.100.zmyeclipse69100200808\tomcat\bin
2008-12-25 11:59:51 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2008-12-25 11:59:51 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 1404 ms
2008-12-25 11:59:51 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2008-12-25 11:59:51 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/6.0.13
................log4j startE:/workspace/fixed/.metadata/.plugins/com.genuitec.eclipse.easie.tomcat.myeclipse/tomcat/webapps/fixedassets/properties/log4j.properties
2008-12-25 11:59:53 org.apache.catalina.core.ApplicationContext log
严重: StandardWrapper.Throwable
java.lang.NoClassDefFoundError: org/apache/log4j/PropertyConfigurator
at validateservlet.Log4JInit.init(Log4JInit.java:22)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4042)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4348)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
............为什么报java.lang.NoClassDefFoundError: org/apache/log4j/PropertyConfigurator的错误,请大家多多指点一下,谢谢了!

解决方案 »

  1.   

    楼主参考一下
     ERROR org.mortbay.log - failed java.lang.NoClassDefFoundError: org/apache/log4j/PropertyConfigurator
    这个博客,就是这个错误其实我认为也是哪个细节没有处理好
    你仔细检查一下
      

  2.   

    1楼:我导了一个包:log4j-1.2.15.jar,2楼:ERROR org.mortbay.log - failed java.lang.NoClassDefFoundError: org/apache/log4j/PropertyConfigurator web.xml里的
    <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.properties</param-value>
    </context-param>
    我不是这样配的呀,它也写的不是很详细
      

  3.   

    你是怎么部署的?实在不行把log4j-1.2.15.jar放到tomcat下的server\lib下面去试试!
      

  4.   

    你是怎么部署的?实在不行把log4j-1.2.15.jar放到tomcat下的server\lib下面去试试!
      

  5.   

    log4j.properties不应该放在webRoot下 你还是放到src下吧 编译之后会到classes下的 默认加载也是找这个路径的!
      

  6.   

    log4j.properties一般放到类路径的根下
      

  7.   

    我开始log4j.properties是放到src下没问题的,运行main类(就是C/S结构的)没问题,我试过!
    但到了tomcat servlet(就是B/S结构)下用到log4j就是不行,提示找不到什么类什么的,
    后来加了servlet,就是如上我发的代码,还是不行,
    再后来GOOGLE了一下,按照先人所讲的办法将log4j-1.2.15.jar放到了项目的WebRoot/WEB-INF/lib下,搞定!原来Tomcat下用到log4j时一定要将log4j-1.2.15.jar放到了项目的WebRoot/WEB-INF/lib下,谢谢大家了!
      

  8.   

    我开始log4j.properties是放到src下没问题的,运行main类(就是C/S结构的)没问题,我试过!
    但到了tomcat servlet(就是B/S结构)下用到log4j就是不行,提示找不到什么类什么的,
    后来加了servlet,就是如上我发的代码,还是不行,
    再后来GOOGLE了一下,按照先人所讲的办法将log4j-1.2.15.jar放到了项目的WebRoot/WEB-INF/lib下,搞定!原来Tomcat下用到log4j时一定要将log4j-1.2.15.jar放到了项目的WebRoot/WEB-INF/lib下,谢谢大家了!
      

  9.   

    汗 。。log4j-1.2.15.jar包都没加 ...
    很多开源的功能都要加入外包库包 。。包就加在WebRoot/WEB-INF/lib 下