`

使用AOP实现监控日志并保存

阅读更多
最近项目中要做个效能监控的功能,经过考虑,觉得选择spring的AOP来实现。必须放在Web端。

例子如下:
import java.util.Date;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.beans.factory.annotation.Autowired;

import com.csair.amp.web.webinf.common.model.LoginInfo;
import com.csair.smms.effmonitor.dto.MonitorLog;
import com.csair.smms.effmonitor.service.MonitorService;
import com.opensymphony.xwork2.ActionContext;

/**
 * 效能监控日志类
 * 
 * @author ahomeeye
 * 
 *         2012-7-11 下午2:32:34
 */
@Aspect
public class EfficiencyMonitor {

	@Autowired
	private MonitorService monitorService;//保存日志信息的业务实现

	// 登录日志,代表监控com.csair.amp.web.webinf.common.LoginAction类的login方法,可用通配符*
	@After("execution(* com.csair.amp.web.webinf.common.LoginAction.login())")
	public void loginLog() {
        //从session中获取用户信息
		LoginInfo u = (LoginInfo) ActionContext.getContext().getSession()
				.get("user");
		MonitorLog m = new MonitorLog();
		m.setUsername(u.getUsername());
		m.setLogtime(new Date());
		m.setFunction(MonitorConstants.LOGIN);
		m.setClassName("com.csair.amp.web.webinf.common.LoginAction");
		m.setMethodName("login");
		monitorService.insertMonitorLog(m);//保存日志信息

		System.out.println("-------用户登录--username=" + u.getUsername());
	}
}


需要导入两个AspectJ库:aspectjweaver.jar和aspectj.jar。

JavaBean类
public class MonitorLog implements Serializable {
	private static final long serialVersionUID = 7707875472196483005L;
	private int id;// 编号
	private String username;// 用户名
	private Date logtime;// 使用时间
	private String function;// 使用功能
	private String className;// 类名
	private String methodName;// 方法名
        //省略setter和getter方法
}


在applicationContext.xml文件里加入如下代码:
<!-- 指定自动搜索Bean组件、自动搜索切面类,前一个代表搜索Bean的包,后一个代表搜索切面类的包-->
   <context:component-scan base-package="com.csair.amp.web.webinf,com.csair.amp.web.webinf.effmonitor">
	<context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect"/>
   </context:component-scan>
	<!-- 启动@AspectJ支持 -->
	<!--<aop:aspectj-autoproxy/> 此标记与下面一行等效-->
	<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"/>


如果项目中使用了spring的自动装配(@Autowired)功能,还行在struts.xml文件中加入下面一行,意思是始终使用自动装配功能:
<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />
  • lib.zip (1.6 MB)
  • 下载次数: 62
0
0
分享到:
评论

相关推荐

    Spring mvc mybatis plus 实现AOP 切面日志系统

    综上所述,本项目结合了Spring MVC、MyBatis Plus和AOP,构建了一个具备日志记录和存储功能的系统,为开发团队提供了一种有效的监控和分析手段,有助于提升应用的稳定性和可维护性。由于提供了数据库支持,开发者...

    spring aop切面拦截指定类和方法实现流程日志跟踪

    本节将详细介绍如何使用Spring AOP实现流程日志跟踪,主要关注于如何通过AOP拦截特定的类和方法来进行日志记录。 ##### 3.1 配置Spring AOP 在Spring配置文件中定义切面和切入点表达式是非常关键的一步。一般来说...

    java文件上传,断点续传+aop操作日志

    综上所述,这个主题涵盖了从用户交互的文件上传和下载功能,到服务器端的断点续传实现,再到使用AOP进行操作日志记录的整个流程。理解并掌握这些知识点对于开发高效、健壮的Web应用程序至关重要。

    spring aop 拦截日志示例

    通过以上步骤,我们就完成了使用Spring AOP拦截并记录系统操作日志和异常日志的过程。在实际项目中,可以根据需求调整切点表达式,优化日志格式,以及对日志进行分类和分级存储。这样的设计使得日志管理变得灵活且...

    C# 静态注入实现AOP

    通过这种方式,我们可以实现在不修改源代码的情况下,添加切面逻辑,如日志记录、性能监控等。 在C#中使用`Mono.Cecil`实现AOP,主要分为以下几个步骤: 1. **加载程序集**:首先,我们需要使用`Assembly...

    Spring Aop实现共享单车按小时计费

    Spring框架中的Spring AOP是实现AOP的一种方式,它允许我们在不修改源代码的情况下,插入额外的功能,如日志、事务管理、性能监控等。在这个特定的场景中,我们将使用Spring AOP来实现共享单车的按小时计费功能。 ...

    spring的aop方式,审计记录用户操作步骤服务,mysql数据库

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,用于实现关注点的分离,使得我们可以将系统中的核心业务逻辑与横切关注点,如日志、事务管理、安全控制、审计等,解耦合。在这个场景中,我们讨论的是如何...

    从JDK动态代理到spring AOP

    而Spring AOP则广泛应用于企业级应用,提供统一的事务管理、日志记录、性能监控等功能,降低了系统的复杂性,提高了代码的可维护性。 了解了基本概念后,我们可以编写一个简单的AOP测试示例。假设有一个`...

    在MVC中记录操作日志类

    - **使用AOP(面向切面编程)**:通过如Unity或Autofac等依赖注入容器,结合AOP特性,可以在不修改业务代码的情况下插入日志记录代码。 4. **日志记录的内容** - **请求信息**:包括HTTP方法(GET、POST等)、URL...

    boot项目审计日志功能ideal源码

    在审计日志切面中,我们可以使用Spring Data JPA或者MyBatis等持久层框架,将日志信息转化为实体并保存到数据库。 4. **shenjirizhi文件**: "shenjirizhi"可能是项目中特定模块的命名,或者源码包的别名。由于...

    aop和字段验证.zip

    AOP是一种编程范式,它允许程序员定义“切面”,这些切面封装了系统中的横切关注点,如日志、事务管理、性能监控等。传统的面向对象编程中,这些关注点通常会分散在各个类的方法中,导致代码重复且难以维护。AOP通过...

    7Spring AOP盗梦空间之二——获得返回值AfterReturnning

    要实现AfterReturning通知,我们可以使用`@AfterReturning`注解,这是一个Spring AOP的注解驱动方式。 `@AfterReturning`注解有以下几个关键属性: 1. `value`:用于指定切入点表达式,确定哪些方法执行后会触发这...

    淘宝-支付宝钱包监控实践

    它的实现依赖于多种技术,如客户端监控日志上报、监控报警系统、多维度监控、独立进程上传以及采集策略配置等。 其中,客户端监控日志上报可以收集应用运行中的关键信息,监控报警系统则能即时通知开发团队异常情况...

    javascript AOP 实现ajax回调函数使用比较方便

    在JavaScript中,AOP常用于管理代码的副作用,如日志记录、异常处理、性能监控等。在这个场景中,AOP被用来简化Ajax回调函数的使用。 Ajax是异步JavaScript和XML的缩写,用于在后台与服务器进行数据交互,而无需...

    基于AOP技术的应用层C++进程恢复

    在C++中,传统的编程方式往往难以有效地处理非功能性需求,如日志记录、异常处理、性能监控等,这些被称为横切关注点。AOP则提供了一种将这些关注点与主要业务逻辑解耦的方法。它引入了切面(Aspect)的概念,切面...

    SpringBoot多数据源配置(方式三:基于AOP切面动态切换需要使用哪个数据源).docx

    ### Spring Boot多数据源配置(方式三:基于AOP切面动态切换需要使用哪个数据源) #### 一、多数据源介绍与应用场景 在实际的软件开发过程中,特别是在微服务架构下,一个应用可能需要同时操作多个不同的数据库,...

    SpringAOPExample:使用 TestNG 的 Spring AOP 示例

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组件,它允许我们以一种模块化的方式处理横切关注点,如日志、事务管理、性能监控等。这些关注点通常与业务逻辑代码交织在一起,...

    JavaScript实现AOP详解(面向切面编程,装饰者模式)

    Oriented Programming,简称AOP)是一种编程范式,它的核心思想是将系统中分散的、与业务逻辑无关的功能(横切关注点,如日志、安全、事务等)从业务逻辑中分离出来,使得开发者能够将这些功能模块化并分别处理,...

Global site tag (gtag.js) - Google Analytics