• 虽然java ee 自带了log组件,在程序中可以直接调用,但是它还不能满足我们开发中的一些要求,例如将log信息输出到文件,输出到emal,输出到socket
    而这些log4j实现了

    下面以一个filter为例说明如何将在web应用中将有关的信息输出到console和文件中。
    1.准备一个sort1.properties文件,并进行配置,并存放在webRoot目录下
    log4j.rootLogger=INFO,A1,R
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %5p [%c{1}] - %m%n

    log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.R.File=d:/test.log
    log4j.appender.R.DatePattern='.'yyyy-MM-dd
    log4j.appender.R.layout=org.apache.log4j.PatternLayout
    log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %5p [%c] - %m%n


    2.在web.xml配置filter
    <filter>
      <filter-name>logFilter</filter-name>
      <filter-class>com.sunhm.LogFilter</filter-class>
      <init-param>
       <param-name>log4j-init-file</param-name>
       <param-value>sort1.properties</param-value>
      </init-param>
     </filter>
     <filter-mapping>
      <filter-name>logFilter</filter-name>
      <url-pattern>/*</url-pattern>
     </filter-mapping>

    3.在buildPath中添加common log4j组件

    3.在程序中实现Filter接口
    package com.sunhm;

    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.log4j.Logger;
    import org.apache.log4j.PropertyConfigurator;

     


    public class LogFilter implements Filter {

     static Logger logger = Logger.getLogger(LogFilter.class);


     
     public void destroy() {
      // TODO Auto-generated method stubl
      logger.info("LogFilter::destroy");
      

     }

     public void doFilter(ServletRequest arg0, ServletResponse arg1,
       FilterChain arg2) throws IOException, ServletException {
      // TODO Auto-generated method stub

      HttpServletRequest request = (HttpServletRequest) arg0;
      HttpServletResponse response = (HttpServletResponse) arg1;

      long startTime = System.currentTimeMillis();
      String requestURI = request.getRequestURI();

      requestURI = request.getQueryString() == null ? requestURI
        : (requestURI + "?" + request.getQueryString());

      arg2.doFilter(request, response);

      long endTime = System.currentTimeMillis();

      logger.info(request.getRemoteAddr() + " 访问了 " + requestURI + ", 总用时 "
        + (endTime - startTime) + " 毫秒。");

     }

     public void init(FilterConfig arg0) throws ServletException {
      // TODO Auto-generated method stub

      // 获取 Filter 的 name,配置在 web.xml 中  
      String prefix = arg0.getServletContext().getRealPath("/");
      String file = arg0.getInitParameter("log4j-init-file");
      if(file != null)
      {
       PropertyConfigurator.configure(prefix+ file);
      }  

      logger.info("LogFilter:init");
     }

    }