欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用spring拦截器实现日志管理实例

程序员文章站 2024-03-05 17:32:25
使用handlerinterceptor拦截器,可以拦截请求,实现通用的日志管理操作  一、添加拦截器类 在"src/main/java"代码文件夹的"org...

使用handlerinterceptor拦截器,可以拦截请求,实现通用的日志管理操作

 一、添加拦截器类

在"src/main/java"代码文件夹的"org.xs.demo1"的包下新建"loginterceptor.java"类:

package org.xs.demo1;

import java.text.simpledateformat;

import javax.servlet.http.httpservletrequest;

import javax.servlet.http.httpservletresponse;

import org.slf4j.logger;

import org.slf4j.loggerfactory;

import org.springframework.core.namedthreadlocal;

import org.springframework.web.servlet.handlerinterceptor;

import org.springframework.web.servlet.modelandview; 

/**

 * 日志拦截器

 * @author thinkgem

 */

public class loginterceptor implements handlerinterceptor {
  private final logger log = loggerfactory.getlogger(getclass().getname());

  private static final threadlocal<long> starttimethreadlocal = new namedthreadlocal<long>("threadlocal starttime");
  /** 

   * 预处理

   */

  @override

  public boolean prehandle(httpservletrequest request, httpservletresponse response, object handler) throws exception {

     

    long begintime = system.currenttimemillis(); //开始时间 

    starttimethreadlocal.set(begintime); //线程绑定变量(该数据只有当前请求的线程可见) 

    log.info("开始计时: {}", new simpledateformat("hh:mm:ss.sss").format(begintime));

     

    return true;

  }

  /**

   * 返回处理

   */

  @override

  public void posthandle(httpservletrequest request, httpservletresponse response, object handler, modelandview modelandview) throws exception {

    if (modelandview != null){

      log.info("viewname: " + modelandview.getviewname());

    }

  }

  /**

   * 后处理

   */

  @override

  public void aftercompletion(httpservletrequest request, httpservletresponse response, object handler, exception ex) throws exception {

    // 保存日志

    //logutils.savelog(request, handler, ex, null);     

    // 输出日志信息

    log.info("访问地址:" + request.getrequesturi() + ",执行方式:" + request.getmethod());

    long begintime = starttimethreadlocal.get(); //得到线程绑定的局部变量(开始时间) 

    long endtime = system.currenttimemillis(); //结束时间 

    log.info("计时结束:{}", new simpledateformat("hh:mm:ss.sss").format(endtime)); 

  }
} 

二、修改配置文件

修改spring-mvc.xml件,加入:

<!-- 拦截器配置 -->

<mvc:interceptors>

  <mvc:interceptor>

    <mvc:mapping path="/**" />

    <bean class="org.xs.demo1.loginterceptor" />

  </mvc:interceptor>

</mvc:interceptors> 

三、运行测试

访问"http://localhost:8080/demo1/hello/list2"地址

使用spring拦截器实现日志管理实例

可以看到拦截器中输出的日志信息了

实例代码地址:spring-handlerinterceptor_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。