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

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
时间: 2024-10-23 12:36:59

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

Servlet过滤器-日志记录

一,什么是servlet过滤器? 过滤器是在数据交互之间过滤数据的中间组件,独立于任何平台或者 Servlet 容器. Servlet过滤器可以应用在客户机和 servlet 之间.servlet 和 servlet 或 JSP 页面之间,以及所包括的每个 JSP 页面之间. 二,sevlet过滤器的作用 servlet过滤器用于根性进入servlet的请求和走出servlet的相应中的有效负载和头信息.过滤器不产生响应,他们只修改或适配请求和响应.servlet过滤器即filter可以认为是s

struts2 学习记录 过滤器 国际化

struts2接触不是一天两天了,但是一直没有用它做什么项目,但老师确一直说它有很大的学习价值,所以还是把我学习到的东西给记录一下,记录的东西没有规律,只是给自己留个备份, struts2中最关键的是action,action可以用来传值,用起来很方便,它可以用el表达式在jsp页面上展示出来,也可以用ognl,el只能表达作用域里面的值,而struts2里面还有个放数据的地方叫做ActionContext,这个类里面可以放不在作用域里的键值对,但是el表达式还是可以获取到,但是效率很低,所以尽

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

1.Servlet.ServletConfig与GenericServlet 首次请求的顺序 => 生成HttpServletRequest与HttpServletResponse =>调用service()方法,以前边两个对象作为参数 =>Web容器启动, =>读取Servlet设置信息,实例化Servlet类 =>为每个Servlet设置信息产生一个ServletConfig对象. =>调用Servlet接口的init()方法,以产生的ServletConfig对象

Servlet组件之一——Filter过滤器

1 学习目标 1. 能够说出过滤器的生命周期 2. 能够写出过滤器的映射路径 3. 能够说出过滤器的四种过滤类型 4. 能够利用FilterConfig获取过滤器的配置参数 5. 能够说出什么是过滤器链 6. 能够说出过滤器链的执行顺序2 过滤器的入门 Java Web的三大组件( 1)都需要交给web服务器运行  2)在web.xml文件中配置  ) 1. Servlet:  javax.servlet.Servlet 通过HTTP协议接收客户端的请求,并且做出响应的一个Java应用程序. 2

servlet/filter/listener/interceptor过滤器、监听器、拦截器区分

因为之前一直分不清过滤器和拦截器的区别,所以有了两者差不多的错觉,因此在这里总结下servlet/filter/listener/interceptor过滤器.监听器.拦截器. 在此之前先简单回顾下servlet: 概述:servlet是一种运行服务器端的java应用程序,它工作在客户端请求与服务器响应的中间层. 主要作用:在于交互式地浏览和修改数据,生成动态 Web 内容. 访问流程: 1,客户端发送请求至服务器端: 2,服务器将请求信息发送至 Servlet: 3,Servlet 生成响应内

操作日志记录

1.存在的意义 所日志记录,就是记录所有的操作,使领导对这个系统的流转了如指掌,同时要是系统出现了问题,也可以清楚找到问题的所在. 2. 界面展示 3. 主要代码分析(提供三种方法)   3.1 方法一 使用aop实现 源码介绍: 01.首先在保证你的环境无误的情况下(我用的是ssh) 02.BussAnnotation.java  (自定义注解) package cn.bdqn.annotation; /** * 自定义注解(用于记录日志) */ import java.lang.annota

Spring AOP进行日志记录

在java开发中日志的管理有很多种.我一般会使用过滤器,或者是Spring的拦截器进行日志的处理.如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个方法的调用.然后进行日志记录.使用过滤器的好处是可以自己选择性的对某一些方法进行过滤,记录日志.但是实现起来有点麻烦. 另外一种就是使用Spring的AOP了.这种方式实现起来非常简单,只要配置一下配置文件就可以了.可是这种方式会拦截下所有的对action的每个操作.使得效率比较低.不过想做详细日志

rsyslog日志记录服务器

一.syslog系统 1.syslog:系统日志服务,统一日志管理 支持C/S架构:可通过UDP或TCP协议提供日志记录服务:实现集中收集日志功能 (1)日志.事件 历史事件日志,保存系统上过去一段时间的发生的事件 事件:系统引导启动.应用程序启动.应用程序尤其是服务类应用程序运行过程中的一些事件: (2)syslog种类 syslogd:system系统日志 klogd:kernel内核日志 2.syslog格式 事件产生的日期时间               主机        进程[pid

wcf利用IDispatchMessageInspector实现接口监控日志记录和并发限流

一般对于提供出来的接口,虽然知道在哪些业务场景下才会被调用,但是不知道什么时候被调用.调用的频率.接口性能,当出现问题的时候也不容易重现请求:为了追踪这些内容就需要把每次接口的调用信息给完整的记录下来,也就是记录日志.日志中可以把调用方ip.服务器ip.调用时间点.时长.输入输出都给完整的记录下来,有了这些数据,排查问题.重现异常.性能瓶颈都能准确的找到切入点. 这种功能,当然没人想要去在每个Operation里边插入一段代码,如果有类似AOP的玩意就再好不过了. wcf中有IDispatchM