
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>InitLog4jServlet</servlet-name>
<servlet-class>com.InitLog4jServlet</servlet-class>
<init-param>
<param-name>log4jLocation</param-name>
<param-value>WEB-INF\log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
InitLog4jServlet.java:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.PropertyConfigurator;
/**
*@author
*@date 2014-4-13
*/
public class InitLog4jServlet extends HttpServlet {
public void init() throws ServletException {
String path=this.getServletContext().getRealPath("/");
String log4jPath=path+this.getInitParameter("log4jLocation");
System.out.println(log4jPath);
PropertyConfigurator.configure(log4jPath);
}
}
Test.java:
import org.apache.log4j.Logger;
/**
*@author
*@date 2014-4-13
*/
public class Test {
private static final Logger logger=Logger.getLogger(Test.class);
public static void main(String[] args) {
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
logger.fatal("fatal");
}
}
将项目部署到tomcat上,开启服务器,InitLog4jServlet的init方法里打印出的log4j.properties路径完全正确,但是执行Test类的main方法时提示:

求解,到底哪里错了?实在不明白
------解决方案--------------------
应该放在src目录下
------解决方案--------------------
启动WEB服务器后,首先服务器去web.xml中加载数据,完成初始化配置,而你的测试类是一个java 应用程序,不会去读web.xml下面的内容,所以会报错
------解决方案--------------------
你把log4j.properties放在src下面,在web.xml中不需要配置,就可以认到了。