1.概述

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

2.技术要点

本实例主要应用Apache的Log4j组件输出日志信息。该组件主要用于日志管理。Logger是Log4j的日志记录器,它是Log4j的核心组件。

在程序中可以使用Logger类的不同方法来输出各种级别的日志信息,Log4j会根据配置的当前日志级别决定输出哪些日志。对应各种级别日志的输出方法如下:

(1)DEBUE日志可以使用Logger类的debug()方法输出日志消息。

语法如下:

logger.debug(Object message)

message:输出的日志消息,例如“logger.error("调试日志")”。

(2)INFO日志可以使用Logger类的debug()方法输出日志消息。

语法如下:

logger.info(Object message)

message:输出的日志消息,例如“logger.error("消息日志")”。

(3)WARN日志可以使用Logger类的info()方法输出日志消息。

语法如下:

logger.warn(Object message)

message:输出的日志消息,例如“logger.error("警告日志")”。

(4)ERROR日志可以使用Logger类的warn()方法输出日志消息。

语法如下:

logger.error(Object message)

message:输出的日志消息,例如“logger.error("数据库连接失败")”。

(5)FATAL日志可以使用Logger类的fatal()方法输出日志消息。

语法如下:

logger.fatal(Object message)

message:输出的日志消息,例如“logger.fatal("内存不足")”。

3.具体实现

(1)创建日志Filter实现类LogFilter.java主要是在初次调用时开始记录,执行时获取访问的URI和执行前的时间,关键代码如下:

public class LogFilter implements Filter {
private Log log = LogFactory.getLog(this.getClass());
private String filterName;
public void init(FilterConfig config) throws ServletException {
filterName = config.getFilterName();//获取 Filter的 name,启动Filter
log.info("启动 Filter: " + filterName);//
}
public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
long startTime = System.currentTimeMillis(); //运行前的时间
String requestURI = request.getRequestURI(); //获取访问的URI
requestURI = request.getQueryString() == null ? requestURI //所有的地址栏参数对比
: (requestURI + "?" + request.getQueryString());
chain.doFilter(request, response);
long endTime = System.currentTimeMillis();
//消耗的总时间
log.info(request.getRemoteAddr() + " 访问了 " + requestURI + ", 总用时 "+ (endTime - startTime) + " 毫秒。");
}
public void destroy() { //销毁时记录日志
}
}

(2)使用日志记录需要commons-logging的Log4j来输出日志,本例输出格式如下:

og4j.rootLogger=INFO, A1
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,SSS} [%l]-[%p] %m%n

Servlet过滤器——日志记录过滤器的更多相关文章

  1. WebAPI问题追踪日志记录过滤器

    公司项目比较坑爹,毕竟涉及到前后端分离.多部门协作,很多时候系统出问题,哪怕已经很清楚了,协作方依然要我们把API调用入参.响应等记录下来,而且是全记录,不光是异常调用,待调查结束后这些日志又需要卸下 ...

  2. springcloud zuulfilter 实现get,post请求日志记录功能

    import com.alibaba.fastjson.JSONObject; import com.idoipo.infras.gateway.open.model.InvokeLogModel; ...

  3. JSP学习笔记(5)——Servlet、监听器、过滤器、MVC模式介绍

    MVC模式 在讲解Servlet前,先介绍一下MVC模式. M:model 模型,相当于数据层,用于存放数据,如一个Java中的一个bean类 V:view 视图,相当于页面层,用于显示数据,如一个网 ...

  4. 我的Java之旅 第八课 Servlet 进阶API、过滤器与监听器

    1.Servlet.ServletConfig与GenericServlet     首次请求的顺序      => 生成HttpServletRequest与HttpServletRespon ...

  5. EL&Filter&Listener:EL表达式和JSTL,Servlet规范中的过滤器,Servlet规范中的监听器,观察着设计模式,监听器的使用,综合案例学生管理系统

    EL&Filter&Listener-授课 1 EL表达式和JSTL 1.1 EL表达式 1.1.1 EL表达式介绍 *** EL(Expression Language):表达式语言 ...

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

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

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

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

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

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

  9. Spring AOP进行日志记录

    在java开发中日志的管理有很多种.我一般会使用过滤器,或者是Spring的拦截器进行日志的处理.如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个 ...

随机推荐

  1. 断开/删除 SVN 链接(.svn)的几种方法

    上传到正式的服务器时需要去掉这些不必要的文件,找到了几种方法: 1.windows下: xcopy project_dir project_dir_1 /s /i (从project_dir 复制文件 ...

  2. C++ cout 如何保留小数输出

    参考 : http://upliu.net/how-cout-out-2-precision.html 大家都知道用 C 语言中 printf () 函数可以非常方便控制保留 几位小数输出 不过在 C ...

  3. js中innerHTML与innerText的用法与区别

    用法: <div id="test">    <span style="color:red">test1</span> te ...

  4. js Function 加不加new 详解

    以下来自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new The new operato ...

  5. SilkTest天龙八部系列5-类的属性

    SilkTest的面向对象机制让用户可以为类定义属性,用property语句实现.除此以外用户在类中还可以定义成员变量和不可变的setting属性.也就是是说Silktest类中可以有以下三种属性/变 ...

  6. hdu4704之费马小定理+整数快速幂

    Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Subm ...

  7. c语言中float、double、long double在内存中存储方式

    存储格式中的二机制转为浮点数: 浮点型变量在计算机内存中占用4个字节(4 Byte),即32-bit,一个浮点数由2部分组成:底数m  和 指数e: 底数部分:使用2进制数来表示此浮点数的实际值: 指 ...

  8. 前端上传组件 - Plupload

    http://www.cnblogs.com/KTblog/p/4740852.html 效果: 起始界面. ------------- 可以上上传单个文件. ------------- 可以上传多个 ...

  9. [转载] iOS开发分辨率那点事

    1 iOS设备的分辨率 iOS设备,目前最主要的有3种(Apple TV等不在此讨论),按分辨率分为两类 iPhone/iPod Touch 普屏分辨率    320像素 x 480像素 Retina ...

  10. pyfits例子

    下面是一个读入fits文件,画积分强度图,再把某个星表里的天体画到图上的python程序. ====================================================== ...