日期:2014-05-18  浏览次数:20724 次

log4j配置文件读取不到的问题

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中不需要配置,就可以认到了。