使用spring的aop监听所有controller或者action日志

日志还是使用log4,直接配置好文件输出或者控制台打印!

注解或者cml都行,我这里采用xml方式:

spring的配置文件中配置日志类和aop:

<!-- 日志监控类 -->
	<bean id="actionLog" class="com.zhuzher.log.ActionLogAspect"></bean>
	<!-- 监控所有action -->
	<!-- 使用cglib代理 -->
	<aop:config proxy-target-class="true">
         <aop:pointcut id="logAction" expression="execution(* com.zhuzher.*.action.*.*(..))"/>
         <aop:aspect id="b" ref="actionLog">
         <!-- <aop:before pointcut-ref="logAction" method="before"/> -->
         <aop:after pointcut-ref="logAction" method="after"/>
      	<!--  <aop:after-returning method="afterReturn" pointcut-ref="logAction" returning="result"/>
         <aop:after-throwing method="afterThrow" pointcut-ref="logAction" throwing="ex"/> -->
         </aop:aspect>
    </aop:config>

  ,根据需要即可,

然后编写切面类,注意,最好使用cglib代理,需要添加依赖,默认使用jdk代理的话,所代理的类必须有接口,否则报错:

//action日志监听
public class ActionLogAspect {

	private final static Logger log = Logger.getLogger(ActionLogAspect.class);
    /**
     * 后置通知(无论方法是否发生异常都会执行,所以访问不到方法的返回值)
     */
    public void after(JoinPoint joinPoint)throws IOException{
        WriteToLog(joinPoint);
    }
    //把信息写进日志里面
    public void WriteToLog(JoinPoint joinPoint)throws IOException {
    	HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.
                getRequestAttributes()).getRequest();
    	//获取方法名
        String cla=joinPoint.getTarget().getClass().getName();//action
        String method=joinPoint.getSignature().getName();//method
        //获取操作人
        HttpSession session = request.getSession();
        Manager manager = (Manager) session.getAttribute("SESSION_MANAGER");
        Integer userid=null;
        String username="";
        if(manager!=null){
        	userid = manager.getId();
        	username =manager.getUsername();
        }
        StringBuffer json=new StringBuffer();//获取请求参数
        Enumeration<String> names = request.getParameterNames();
		while(names.hasMoreElements()){
			//获取每一个文本域的name
			String name = names.nextElement();
			String [] values = request.getParameterValues(name);
			if(values!=null && values.length>0){
				//输出参数名和参数值
				json.append(name+":{");
				for(String val:values){
					json.append(val+",");
				}
				if (‘,‘==json.charAt(json.length()-1)) json.deleteCharAt(json.length()-1);
				json.append("},");
			}
		}
 		if (json!=null && json.length()>0 && ‘,‘==json.charAt(json.length()-1)) json.deleteCharAt(json.length()-1);
        log.debug("{method:{"+cla+"."+method+"}, params:{"+json.toString()+"},user:{id:"+userid+",username:"+username+"}}");
    }
}

 获取对应的方法名,类名,以及从session中获取当前用户就可以了

原文地址:https://www.cnblogs.com/houzheng/p/9688049.html

时间: 2025-01-13 22:14:53

使用spring的aop监听所有controller或者action日志的相关文章

spring中配置监听队列的MQ

一.spring中配置监听队列的MQ相关信息注:${}是读取propertites文件的常量,这里忽略.绿色部分配置在接收和发送端都要配置. <bean id="axx" class="com.ibm.mq.jms.MQQueueConnectionFactory"> <property name="hostName" value="${}" />  <property name="po

十一、Spring之事件监听

Spring之事件监听 ApplicationListener ApplicationListener是Spring事件机制的一部分,与抽象类ApplicationEvent类配合来完成ApplicationContext的事件机制. 如果容器中存在ApplicationListener的Bean,当ApplicationContext调用publishEvent方法时,对应的Bean会被触发.这一过程是典型的观察者模式的实现. 源码: @FunctionalInterface public i

Windows平台下Oracle监听服务启动过程中日志输出

Windows平台下Oracle监听服务启动过程中日志输出记录. 日志目录:D:\app\Administrator\diag\tnslsnr\WIN-RU03CB21QGA\listener\trace\listener.log 日志输出内容: Sat Aug 06 20:38:44 2016 系统参数文件为D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora 写入d:\app\administrator

Java Spring 自定义事件监听

ApplicationContext 事件 定义一个context的起动监听事件 import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextStartedEvent; public class EventStart implements ApplicationListener<ContextStartedEvent>{ @Override pub

Spring 监听

Spring 中的事件监听的实现 这里我们不讨论事件监听的机制的原理,我们只讨论如何在项目中实现时间监听. spring的事件监听是基于观察者模式.设计开发中.如下类与接口是我们必须要使用的. ApplicationContext 首先我们了解一下ApplicationContext,还记得 ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml"); 1 1 ApplicationContext相当于Sp

深入理解Spring的容器内事件发布监听机制

目录 1. 什么是事件监听机制 2. JDK中对事件监听机制的支持 2.1 基于JDK实现对任务执行结果的监听 3.Spring容器对事件监听机制的支持 3.1 基于Spring实现对任务执行结果的监听 4.Spring事件监听源码解析 4.1 初始化事件发布器流程 4.2 注册事件监听器流程 4.3 容器事件发布流程 5.总结 1. 什么是事件监听机制 在讲解事件监听机制前,我们先回顾下设计模式中的观察者模式,因为事件监听机制可以说是在典型观察者模式基础上的进一步抽象和改进.我们可以在JDK或

spring boot 学习 ---- 使用事件监听

spring 的事件监听 事件监听其实我们并不陌生,简单来讲,当程序达到了某个特定的条件,程序就会自动执行一段指令.在spring 中也一样,我们可以使用spring中的事件监听来实现某些特定的需求. 发布事件 既然要监听事件,首先要发布我们的事件嘛.在spring中发布事件我们可以通过继承ApplicationEvent 来发布我们的事件类. @Data public class SendEvent extends ApplicationEvent { public SendEvent(Obj

java 事件监听

事件监听实现: 三要素: 1.事件源(数据源,要处理的数据) 2.事件 (承载数据,传递信息并被监听) 3.监听器 (负责对数据的业务处理) --该开发用例采用了Spring的事件监听 1.  定义事件类型 public class MyEvent extends ApplicationEvent { private static final long serialVersionUID = 7937618461275424515L; // 其他属性 (非必须) ... ... public My

swift项目第六天:中间发布按钮的封装以及监听点击事件

import UIKit /* 总结:1:给UIButton写分类,新建文件swiftFile,一般为了区分起名字都是名字-Extension,要想调用UI控件需要导入 import UIKit框架,然后给系统的类写分类:extension UIButton {},提供类方法或是构造函数的方法,把与该控件有关的业务逻辑全封装在分类的内部.2:封装方法:类方法:都是以class开头,class func 函数名(参数)->返回值类型{业务逻辑代码,return 返回值}:例子: class fun