使用Filter来输出log日志

         Filter过滤器能拦截所有的url地址,我们就能从用户的访问的url地址里面找到用户的ip和访问的页面,还可以获得用户到来的第时间和用户离开的时间,这对于我们统计用户的行为来说很重要的。获得这些信息之后我们可以通过log日志来进行输出,可以输出到文件里面,也可以直接在控制台进行打印。   

        在进行日志输出的时候我们需要使用到commons-logging-1.1.1.jar包。   

       1. 新建一个Filter

     

package ynu.sanwen.testfilter;

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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class FilterLog implements Filter {

private Log log=LogFactory.getLog(this.getClass());//Log的对象
private String fileName; //当前Filter的名称

public void destroy() {
log.info("关闭的Filter:"+fileName);
}

public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)req;
long startTime=System.currentTimeMillis();
String requestUrl=request.getRequestURI();
requestUrl=request.getQueryString()==null?requestUrl:(requestUrl+"?"+request.getQueryString());
chain.doFilter(req, res);
long endTime=System.currentTimeMillis();
log.info(request.getRemoteAddr()+"访问了"+requestUrl);
log.info("总共使用的时间是:"+(endTime-startTime));

}

public void init(FilterConfig config) throws ServletException {
fileName=config.getFilterName();
log.info("启动的Filter的:"+fileName);
}
}

       2.配置web.xml文件


FilterLog
ynu.sanwen.testfilter.FilterLog


FilterLog
*

效果截图:

项目代码:http://www.cangzhang.com/wp-content/uploads/2012/09/Filter_log.zip

共有 246 条评论

Top