日志记录Filter

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

LogFilter.java

package com.helloweenvsfei.filter;

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

public class LogFilter implements Filter {

    private Log log = LogFactory.getLog(this.getClass());

    private String filterName;

    public void init(FilterConfig config) throws ServletException {

        // 获取 Filter 的 name,配置在 web.xml 中
        filterName = config.getFilterName();

        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();

        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() {
        log.info("关闭 Filter: " + filterName);
    }

}

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

可参考

commmons_logging 和 log4j 之日志笔记一

log4j.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

web.xml

<filter>
    <filter-name>logFilter</filter-name>
    <filter-class>com.helloweenvsfei.filter.LogFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>logFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

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

时间: 2024-08-28 07:43:39

日志记录Filter的相关文章

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

1.概述 在实际的项目开发过程中,经常需要在项目运行时,记录并在控制台中输出运行时的日志信息,便于查看项目的运行状况.本实例将介绍如何应用过滤器实现日志记录.运行本实例,将在控制台中输出项目运行时的日志信息. 2.技术要点 本实例主要应用Apache的Log4j组件输出日志信息.该组件主要用于日志管理.Logger是Log4j的日志记录器,它是Log4j的核心组件. 在程序中可以使用Logger类的不同方法来输出各种级别的日志信息,Log4j会根据配置的当前日志级别决定输出哪些日志.对应各种级别

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

此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-1-30 13:54:02,请知悉. 所需的 jar 包下载链接为:http://yunpan.cn/cKE56sxqtQCfP  访问密码 63d8 有关 Log4J 日志文件中日志级别及文件配置的详细情况,在 Log4J 的配置文件(xml.properties)中有详细的介绍,敬请参阅!

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

没有接触过的,先了解一下:log4j教程 部分内容来:log4j教程 感谢! 需要导入包: log包:log4j-12.17.jar 第一步:web.xml配置 <!-- log4j配置,文件路径,因为是跟随项目启动 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.xml</param-value>

操作日志记录

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

JAVA实现通用日志记录

原文:http://blog.csdn.net/jinzhencs/article/details/51882751 前言: 之前想在filter层直接过滤httpServerletRequest请求进行日志处理,但是之后再getWriter()的 时候报 already been call异常.查了下,才发现原来流形式的只能读取一次..就好像食物,吃了就没了.. 所以在filter和inteceptor里面是没法通过获取request的流来进行日志记录的. 于是还是准备用通用的方法:contr

Elmah 日志记录组件

[http://www.cnblogs.com/chenkai/archive/2013/01/26/2877855.html] 常在服务器端处理用户请求时.特别是针对Web应用程序.当出现异常是可以根据日志操作记录还原异常出现时操作步骤.而记录异常堆栈信息判断问题出现问题位置. 为了跟踪和记录服务器行为.特别是针对出现异常时构建简单.统一的异常处理模式就显得尤为重要. 如果有一个基础的架构用来记录服务器端中日志和事件.那么对于调试和在问题的解决就变得更加简单直接.针对日志记录.可能针对大部分开

Servlet过滤器-日志记录

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

Spring Boot 日志记录 SLF4J

Spring Boot 日志记录 SLF4J 2016年01月12日 09:25:28 阅读数:54086 在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人皆知的方法了. 其实在开发中我们不建议使用 System.out 因为大量的使用 System.out 会增加资源的消耗. 而Log4j 更为灵活在性能上也相比 System.out 要高,我们可以配置输出级别,可以指定多个日志文件分别记录不同的日志. 使用 System.out 是在当前线程执行的

IDEA项目搭建九——使用slf4j和logback进行日志记录

.简介 java里面日志分为两部分一个门面.一个实现,我们所熟知的SLF4j.Log4j.Log4j2.Logback的日志组件slf4j是门面提供的统一的入口,具体实现由log4j.log4j2.logback来实现 log4j由于太老作者自己也不打算重构了所以放弃 log4j2是apach的一个项目很好,但支持上面略有欠缺所以放弃 logback是之前log4j的作者自己开源的一个新的log组件,做了大量的调整及优化,性能及使用性上都有很大的提高,再加上沉淀了很多年又完全实现了slf4j,所