`

使用Sping AOP记录操作日志和错误日志

    博客分类:
  • J2EE
阅读更多

使用AOP进行日志记录

我们应该首先思考使用哪一种类型的通知?切入点应该选在哪?

这是我们使用AOP编程必须思考的东西。

在这里

操作日志我采用了环绕通知类型(@Around)

错误日志我采用了异常通知类型(@AfterThrowing)

 

需要引入lib

commons-logging.jar
spring.jar
aspectjrt.jar
aspectjweaver.jar
cglib-nodep-2.*.*.jar

 

操作日志:

package com.scsk.common;

import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionMapping;
import org.apache.struts2.ServletActionContext;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;

import com.opensymphony.xwork2.ActionContext;

@Aspect
public class OptLogger {
	@Around("execution(* com.scsk.*.web.action.*.*(..))")
	public Object loggerOpt(ProceedingJoinPoint pjp) throws Throwable {
		// 获取要执行的方法名和目标对象类型
		String methodName = pjp.getSignature().getName();
		String clazzName = pjp.getTarget().getClass().getSimpleName();

		System.out.println("=========  操作日志记录  =========");

		//这里使用了struts2的ActionContext,可以 方便的取出Session中的操作用户信息
		Map<String,Object> session =  (Map<String,Object>)ActionContext.getContext().getSession();
		username = (String) session.get("username");
		
		//后台打印,如果需要写入数据库,编写相应代码就可以完成操作了
		System.out.println("Time:" + new Date().toString());
		System.out.println("User:" + username);
		System.out.println("Class:" + clazzName);
		System.out.println("Method:" + methodName);

		// 调用目标对象的方法
		Object retVal = pjp.proceed();

		return retVal;
	}
}

 错误日志

package com.scsk.common;

import java.io.IOException;
import java.util.Date;

import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class ExceptionLogger {
	@AfterThrowing(pointcut = "execution(* com.scsk.*.web.action.*.*(..))", throwing = "ex")
	public void loggerException(Exception ex) {
		System.out.println("=========  异常错误记录  =========");
		System.out.println("Time:" + new Date().toString());
		System.out.println("Msg:" + ex.toString());
		
	}
}

 在spring配置文件中如下配置:

<bean id="exLogger" class="com.scsk.common.ExceptionLogger"></bean>
	<bean id="optLogger" class="com.scsk.common.OptLogger"></bean>
	<aop:aspectj-autoproxy proxy-target-class="true" />
 这样我们的日志记录功能就完成了
分享到:
评论
1 楼 daniaowansui 2016-03-15  
什么垃圾东西?

相关推荐

    spring aop 自定义注解保存操作日志到mysql数据库 源码

    4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、...

    Spring aop 记录操作日志 Aspect 源码

    本篇将深入探讨如何使用Spring AOP来记录操作日志,并通过自定义Aspect和注解实现这一功能。 首先,我们要理解Spring AOP的基本概念。AOP是面向对象编程(OOP)的一种补充,它专注于处理那些横向的、与业务逻辑无关...

    spring aop 操作日志

    本资源用来展示如何使用 spring aop 进行日志记录,例子里面通过aop的配置,把产生的日志存放到当前项目的根目录下,而且对方法执行过程中的参数进行了记录,对于aop如何记录日志不清楚的同学可以看看。

    spring AOP 切面日志 分层打日志

    在Spring框架中,AOP(面向切面编程)是一种...通过上述方式,我们可以有效地利用Spring AOP实现分层日志记录,提高代码的可维护性和问题排查效率。同时,合理的日志设计和管理对于任何应用程序来说都是至关重要的。

    spring aop实现接口参数变更前后对比和日志记录

    spring aop实现接口参数变更前后对比和日志记录完整代码,拿到项目代码,只需要做数据库连接的修改即可运行起来使用,代码案例详细,真是可靠,代码原文地址:...

    swagger和spring Aop日志结合

    将Swagger和Spring AOP结合起来,我们可以在API调用时自动记录日志,这有助于跟踪API的使用情况、性能和错误。以下是一个简单的步骤来实现这一目标: 1. 引入依赖:在项目中添加Swagger和Spring AOP的相关依赖,如`...

    spring aop 切面添加日志

    通过这个项目,我们可以学习到如何在Spring AOP中实现日志记录,这不仅可以帮助我们调试和监控应用程序,还可以为未来的维护提供宝贵的线索。同时,这也是理解和实践面向切面编程的一个很好的起点。

    Spring AOP 日志管理 实例

    Spring AOP 日志管理 实例LoggingThrowsAdvice.java

    spring aop jar 包

    这个"spring aop jar 包"包含了实现这一功能所需的类和接口,使得开发者能够轻松地实现面向切面的编程。 在Spring AOP中,主要涉及以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,比如日志记录...

    spring aop实现日志功能

    标题"spring aop实现日志功能"涉及到的是如何利用Spring AOP来记录和跟踪应用程序中的操作,这对于调试、性能分析和故障排查至关重要。下面我们将详细探讨如何通过Spring AOP来实现日志功能。 首先,理解AOP的基本...

    JAVA 中Spring aop 实现日志记载

    在实际开发中,Spring AOP的日志记载不仅限于打印方法名和返回值,还可以记录参数、执行时间、异常信息等,帮助开发者更好地监控和调试系统。 综上所述,Spring AOP提供了一种优雅的方式,让我们能够轻松地在不...

    Spring之AOP在鉴权和日志记录中的应用

    **Spring AOP在鉴权和日志记录中的应用** **一、引言** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它为开发者提供了在不修改源代码的情况下,对应用程序进行功能增强...

    Spring AOP--日志管理

    在IT行业中,Spring框架是Java开发中的核心工具之一,它为开发者提供了许多强大的功能...在提供的"aopLog-demo"项目中,你可以找到更多关于Spring AOP日志管理的实际应用示例,这将有助于你进一步理解和实践这一技术。

    Spring AOP实战 记录日志 下载可以直接使用

    使用场景及目标: 在生产环境中,通过巧妙的AOP机制,实现对日志的细致记录和处理。我们的目标是提高日志记录的效率和规范性,为监控和故障排查提供更为轻松便捷的工具。 其他说明: 这一方法极为便捷,不仅简化了...

    springaop拦截controller日志

    "springaop拦截controller日志"这个主题旨在讲解如何使用Spring AOP来拦截Controller层的方法调用,并在方法执行前后记录相关日志。 首先,了解Spring AOP的基本概念。AOP是一种编程范式,它允许程序员定义“切面”...

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

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

    Spring AOP完整例子

    总结一下,Spring AOP提供了一种优雅的方式来处理系统的横切关注点,如日志记录、事务管理或性能监控。通过定义切点、创建切面和配置通知,我们可以实现代码的解耦,提高可维护性和复用性。这个例子提供了学习Spring...

    简单spring aop 例子

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...

Global site tag (gtag.js) - Google Analytics