问个关于log4j的问题问个关于log4j的问题log4j.propertieslog4j.rootLogger = error,A1,A2log4j.appender.A1 = org.apache.log4j.ConsoleAppender
log4j.appender.A1.Target = System.out
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern = \n\n[%-5p] %d{yyyy-MM-dd HH:mm:ss} method:%l%n%m%n
log4j.appender.A2 = org.apache.log4j.RollingFileAppender
#log4j.appender.A2 = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.A2.File = /WEB-INF/logs/error.log
#log4j.appender.A2.File = log4j.log
#log4j.appender.A2.DatePattern='.'yyyy-MM-dd log4j.appender.A2.MaxFileSize = 1024KB
log4j.appender.A2.MaxBackupIndex = 5
log4j.appender.A2.layout = org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern = \n\n[%-5p] %d{yyyy-MM-dd HH:mm:ss} method:%l%n%m%n路径:WebRoot\WEB-INF\
web.xml配置<servlet>
    <servlet-name>Environment</servlet-name>
    <servlet-class>app.servlet.EnvServlet</servlet-class>    <init-param>
  <param-name>log4jInitFile</param-name>
  <param-value>/WEB-INF/log4j.properties</param-value><!--log4j日志配置文件的存放位置-->
  </init-param>
      <load-on-startup>0</load-on-startup>
  </servlet>
  
    <servlet-mapping>
    <servlet-name>Environment</servlet-name>
    <url-pattern>/servlet/EnvServlet.do</url-pattern>
  </servlet-mapping>
EnvServlet读取配置信息package app.servlet;import javax.servlet.http.HttpServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;import java.io.IOException;
import java.util.Enumeration;
import app.core.Environment;
import app.core.HibernateSessions;
import org.apache.commons.logging.*;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.BasicConfigurator;
import org.springframework.util.Log4jConfigurer;
import org.springframework.web.util.Log4jWebConfigurer;import common.Logger;public class EnvServlet extends HttpServlet {  private static Logger logger = Logger.getLogger(EnvServlet.class);  */
  // private static Log log = LogFactory.getLog(EnvServlet.class);
  /**
  * 
  * @param config
  *       ServletConfig
  * @throws ServletException
  */
public void init(ServletConfig config) throws ServletException {
    try {// Log4jWebConfigurer.initLogging(config.getServletContext());String file = config.getInitParameter("log4jInitFile");
  if (file != null) {         PropertyConfigurator.configure(file);             }
    } catch (Exception e) {
            logger.err(e); 
    System.err.println("the log4j configuretor file is error");
    }
      // BasicConfigurator.configure();
              
  }  public void destroy() {
    Environment.clearAttrbutes();  }
}我的本意是在WebRoot\WEB-INF\logs\新建一个error.log文件,把出错信息写到里面,但怎么配置就是路径出错!启动不成功,各位帮我看看是什么错误!

解决方案 »

  1.   

    log4j.properties不是都放在/WEB-INF/classes下面吗?
      

  2.   

    private static Logger logger = Logger.getLogger(EnvServlet.class);
    你log4j都还没初始化你就在调用了阿?静态变量会在你初始化之前就分配的.
      

  3.   

    log4j.appender.A2.File = /WEB-INF/logs/error.log 这一句的路径有问题.如果你在TOMCAT中调用的话,那当前路径默认是指向system32目录的,即写成log4j.appender.A2.File = logs/error.log 那么在system32目录下你可以找到logs目录和里面的error.log .如果你用eclipse调用的话,那当前路径是指向eclipse根目录,甚至还不是你的项目目录,更不是你项目目录下的webContent.你可以在servlet中用
    File a = new File(".");
    System.out.println("当前目录:"+a.getAbsolutePath());
    打印出实际路径.一般我都是用D:/logs之类的绝对路径来指定log输出的.
      

  4.   

    tatic Logger logger = Logger.getLogger(EnvServlet.class);这句没问题,根Logger本来就是静态方式初始化的.你可以下载一个log4j的手册:
    http://blog.k99k.com/post/log4j_handbook.html