Filter也可以日志记录,在request 之前后, 该filter 使用Apache 日只记录工具,记录客户IP ,访问URI 以及消耗时间。

LogFilter.java

  1. package com.helloweenvsfei.filter;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.FilterConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13.  
  14. import org.apache.commons.logging.Log;
  15. import org.apache.commons.logging.LogFactory;
  16.  
  17. public class LogFilter implements Filter {
  18.  
  19. private Log log = LogFactory.getLog(this.getClass());
  20.  
  21. private String filterName;
  22.  
  23. public void init(FilterConfig config) throws ServletException {
  24.  
  25. // 获取 Filter 的 name,配置在 web.xml 中
  26. filterName = config.getFilterName();
  27.  
  28. log.info("启动 Filter: " + filterName);
  29.  
  30. }
  31.  
  32. public void doFilter(ServletRequest req, ServletResponse res,
  33. FilterChain chain) throws IOException, ServletException {
  34.  
  35. HttpServletRequest request = (HttpServletRequest) req;
  36. HttpServletResponse response = (HttpServletResponse) res;
  37.  
  38. long startTime = System.currentTimeMillis();
  39. String requestURI = request.getRequestURI();
  40.  
  41. requestURI = request.getQueryString() == null ? requestURI
  42. : (requestURI + "?" + request.getQueryString());
  43.  
  44. chain.doFilter(request, response);
  45.  
  46. long endTime = System.currentTimeMillis();
  47.  
  48. log.info(request.getRemoteAddr() + " 访问了 " + requestURI + ", 总用时 "
  49. + (endTime - startTime) + " 毫秒。");
  50.  
  51. }
  52.  
  53. public void destroy() {
  54. log.info("关闭 Filter: " + filterName);
  55. }
  56.  
  57. }

log4j.properties   使用jar log4j.jar 和 commons-logging.jar

可参考

commmons_logging 和 log4j 之日志笔记一

  1. log4j.rootLogger=INFO, A1
  2.  
  3. log4j.appender.A1=org.apache.log4j.ConsoleAppender
  4. log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  5. log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%l]-[%p] %m%n

web.xml

  1. <filter>
  2. <filter-name>logFilter</filter-name>
  3. <filter-class>com.helloweenvsfei.filter.LogFilter</filter-class>
  4. </filter>
  5.  
  6. <filter-mapping>
  7. <filter-name>logFilter</filter-name>
  8. <url-pattern>/*</url-pattern>
  9. </filter-mapping>

如不需要日志Filter ,可把web.xml 相应注释掉即可。

日志记录Filter的更多相关文章

  1. springmvc+log4j操作日志记录,详细配置

    没有接触过的,先了解一下:log4j教程 部分内容来:log4j教程 感谢! 需要导入包: log包:log4j-12.17.jar 第一步:web.xml配置 <!-- log4j配置,文件路 ...

  2. Java学习笔记(十九)——Java 日志记录 AND log4j

    [前面的话] 学习的进度应该稍微在快一点. Java日志到了必须学习怎么使用的时候了,因为在项目中要进行使用.基础性文章,选择性阅读. [结构] java日志对调试,记录运行,问题定位都起到了很重要的 ...

  3. Java学习-007-Log4J 日志记录配置文件详解及实例源代码

    此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:20 ...

  4. 【改进】用Log4net建立日志记录

    上一篇随笔中只使用了普通的文件读写来进行日志的写入,正如很多朋友说的,频繁的对文件进行读写会造成很多的问题,代码缺少边界控制和操作控制,没有对资源进行管理,是非常典型的bad code. 然后经过前辈 ...

  5. 日志记录组件[Log4net]详细介绍

    转载:http://www.cnblogs.com/liwei6797/archive/2007/04/27/729679.html 因为工作中有要用到Log记录,找到一篇不错的文章,就转了过来. 一 ...

  6. Servlet过滤器——日志记录过滤器

    1.概述 在实际的项目开发过程中,经常需要在项目运行时,记录并在控制台中输出运行时的日志信息,便于查看项目的运行状况.本实例将介绍如何应用过滤器实现日志记录.运行本实例,将在控制台中输出项目运行时的日 ...

  7. 从壹开始前后端分离 [.netCore 不定期更新 ] 三十五║ 完美实现全局异常日志记录

    缘起 哈喽我是不定期更新的日常,昨天群里小伙伴问到了记录日志,当然,以前我也挖过这个坑,后来一直没有来得及填上,也想着 swagger 一直又有错误信息展示的功能,就迟迟没有添加这个功能,不过昨天夜里 ...

  8. C# 利用Log4Net进行日志记录

    概述 本文主要简单说明如何使用Log4Net进行日志记录,在程序开发过程中记录日志的优点: 它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug: 一旦在程序中加入了Log 输出 ...

  9. Spring Boot 之日志记录

    Spring Boot 之日志记录 Spring Boot 支持集成 Java 世界主流的日志库. 如果对于 Java 日志库不熟悉,可以参考:细说 Java 主流日志工具库 关键词: log4j, ...

随机推荐

  1. 解决Node.js调用fs.renameSync报错的问题(Error: EXDEV, cross-device link not permitted)

    2014-08-23 今天开始学习Node.js,在写一个文件上传的功能时候,调用fs.renameSync方法错误 出错代码所在如下: function upload(response,reques ...

  2. MFC的命令行

    一个程序,我们通过输入不同的命令行参数,就可以实现一个可执行文件,多种功能,通过命令行来控制它的行为,例如,我们在控制台的时候,就是遇到最多的,如一个exe程序,加入为test..exe,我们可以设置 ...

  3. hdu--1800--字典树&&其他

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1800 根据题意可知:意思是有若干个飞行员,需要在扫帚上练习飞行,每个飞行员具有不同的等级,且等级高的飞 ...

  4. javascript原生ajax;

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. SQL学习之Insert的特殊用法(插入检索出的数据,表之间的数据复制)

    1.插入检索出的数据 select * from dbo.Customers_1

  6. 创建以及加载模块【nodejs第四篇】

    建立两个文件,文件一createModule.js ,文件二main.js createModule.js的代码,主要用于创建一个模块 /** * Created by Administrator o ...

  7. Windows下提升进程权限(转)

    from: http://www.oschina.net/code/snippet_222150_19533 windows的每个用户登录系统后,系统会产生一个访问令牌(access token) , ...

  8. Java基础之静态变量

    public class StaticVariable { public static void main(String[] args) { Person p1 = new Person(); Per ...

  9. Django Web开发【2】Django入门

    配置开发环境 1.安装Python,我使用的是centos 6.0,python版本为2.6.6 2.安装Django,Django版本为1.3.5 在Django官网下载对应版本之后,解压压缩包,进 ...

  10. js点击事件代理时切换图片如何防抖动

    由于图片的加载速度比较慢,我们可以直接用64base对图片进行编码,把编码加在图片的url中~~~这样加载会快一些,也不会有切换图片时出现的抖动效果