Aop实现见代码,简单demo实现

 package com.idcos.automate.config;

 import com.idcos.automate.dal.auto.dao.dcos.DcosLogDAO;
import com.idcos.automate.dal.auto.dataobject.dcos.DcosLogDO;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.Arrays; /**
* @author GuanBin
* @version LoggerConfig.java, v1 2018/4/24 下午5:34 GuanBin Exp $$
*/
@Aspect//切面注解
@Component//@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
public class LoggerConfig { @Autowired
private DcosLogDAO dcosLogDAO; private final org.slf4j.Logger log = LoggerFactory.getLogger(this.getClass()); //定义切点,监听所有的web下的controller
@Pointcut("execution(public * com.idcos.automate.web..*.*(..))")
public void webLog() {
} //抛出切点连接中的异常信息
@AfterThrowing(pointcut = "webLog()", throwing = "e")
public void logAfterThrowing(JoinPoint joinPoint, Throwable e) {
log.error("Exception in {}.{}.() cause = {}", joinPoint.getSignature().getDeclaringType(), joinPoint.getSignature().getName(), e.getCause() != null ? e.getCause() : null);
} /**
* 在方法前和方法后执行
*/
@Around("webLog()")
public void logWebAccessInfo(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { long start = System.currentTimeMillis();
//JoinPoint、ProceedingJoinPoint提供访问当前被通知方法的目标对象、代理对象、方法参数等数据,其中ProceedingJoinPoint提供访问当前被通知方法的目标对象
// 在环绕Around时使用:
proceedingJoinPoint.proceed();
long end = System.currentTimeMillis();//测试方法执行后的时间是多少
float time = BigDecimal.valueOf(end-start).divide(BigDecimal.valueOf()).setScale(, BigDecimal.ROUND_HALF_UP).floatValue(); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest(); // 记录下请求内容
log.info("URL : " + request.getRequestURL().toString());//请求的url
log.info("HTTP_METHOD : " + request.getMethod());//请求的方法
log.info("IP : " + request.getRemoteAddr());//请求方的ip
log.info("CLASS_METHOD : " + proceedingJoinPoint.getSignature().getDeclaringTypeName() + "." + proceedingJoinPoint.getSignature().getName());
log.info("ARGS : " + Arrays.toString(proceedingJoinPoint.getArgs()));//请求的参数 DcosLogDO dcosLogDO = new DcosLogDO(); dcosLogDO.setClassName(request.getClass().getName());
dcosLogDO.setMethodName(request.getMethod());
dcosLogDO.setUrl(request.getRemoteAddr()+request.getRequestURL());
dcosLogDO.setTime(Float.toString(time));
dcosLogDAO.saveAndFlush(dcosLogDO);
} }

可参考:

https://blog.csdn.net/zhengchao1991/article/details/53391244

Spring 之Aop实现日志记录的更多相关文章

  1. Spring AOP 完成日志记录

    Spring AOP 完成日志记录 http://hotstrong.iteye.com/blog/1330046

  2. Spring AOP进行日志记录

    在java开发中日志的管理有很多种.我一般会使用过滤器,或者是Spring的拦截器进行日志的处理.如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个 ...

  3. Spring AOP进行日志记录,管理

    在java开发中日志的管理有很多种.我一般会使用过滤器,或者是Spring的拦截器进行日志的处理.如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个 ...

  4. spring boot集成aop实现日志记录

    1.pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  5. Spring AOP的日志记录

    现在的项目是Spring+MyBatis,前段时间项目经理让我干了一个活,就是给所有的controller里的所有方法加上日志记录的代码,其实没有多少,也就300来个方法,也没有抱怨什么,一边打着瞌睡 ...

  6. java使用动态代理来实现AOP(日志记录)

    以下内容为原创,转载时请注明链接地址:http://www.cnblogs.com/tiantianbyconan/p/3336627.html AOP(面向方面)的思想,就是把项目共同的那部分功能分 ...

  7. 自定义注解-aop实现日志记录

    关于注解,平时接触的可不少,像是 @Controller.@Service.@Autowried 等等,不知道你是否有过这种疑惑,使用 @Service 注解的类成为我们的业务类,使用 @Contro ...

  8. 记一次基于springboot+aop实现日志记录实战

    1. 为什么要记录日志 好处: a. 可以对一些重要功能进行记录,方便以后跟踪是谁操作此功能的. b. 在操作某些功能时可能会发生异常,但每次出现异常我们想定位日志都要去服务器查看我们的日志.有了日志 ...

  9. 剑指架构师系列-spring boot的logback日志记录

    Spring Boot集成了Logback日志系统. Logback的核心对象主要有3个:Logger.Appender.Layout 1.Logback Logger:日志的记录器 主要用于存放日志 ...

随机推荐

  1. C# WPF MVVM QQ密码管家项目(8,完结篇:自动输入QQ号、密码)

    原文:C# WPF MVVM QQ密码管家项目(8,完结篇:自动输入QQ号.密码) 目录: 1,界面设计 2,数据模型的建立与数据绑定 3,添加QQ数据 4,修改QQ数据 5,删除QQ数据 6,密码选 ...

  2. MAT 专题

    http://smallnetvisitor.iteye.com/blog/1826434 运行user任务管理器查看到的pid号:

  3. 熵、交叉熵、相对熵(KL 散度)意义及其关系

    熵:H(p)=−∑xp(x)logp(x) 交叉熵:H(p,q)=−∑xp(x)logq(x) 相对熵:KL(p∥q)=−∑xp(x)logq(x)p(x) 相对熵(relative entropy) ...

  4. 文件上传(bootstrap fileinput)

    在做Excel文件上传和下载时,原生文件输入框太不美观,从网上找的bootstrap fileinput还是挺漂亮的, 需要引用的文件 //4.fileUpload bundles.Add(new S ...

  5. sdutoj1225--编辑距离(dp:字符串转换)

    编辑距离 nid=24#time" style="padding-bottom:0px; margin:0px; padding-left:0px; padding-right:0 ...

  6. SwiftCafe 咖啡时光 - 了解 Swift 中的闭包

    闭包(Closure) 是现代开发语言的必备特性,极大的提高了我们的开发效率. 关于闭包,你可以把它理解为一种特殊的变量或对象.简而言之,我们通常的对象,里面存储的是变量或对象的值,而闭包里面存储的是 ...

  7. 各种Message中文解释(一部分)

    函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.该函数是应用程序和应用程序之间进行消息传递的主要手段之一.    函数原型:LRESUL ...

  8. window下nodejs爬取gb2312网页出现乱码的解决方案

     发布于 2012-8-22 18:15  5230 次浏览  最后一次编辑是 2013-2-18 22:31 linux环境下,我们可以通过 iconv 这个C++模块来处理Node.JS不支持的字 ...

  9. Quickreport不用数据字段,如何实现多页打印?

    用QRCompositeReport控件,所谓复合报表,可把不同的报表加在一起,Example procedure TForm1.QRCompositeReport1AddReports( Sende ...

  10. Code First 连接已有数据库

    连接数据库                 生成结果并没有一个可视化界面(Model First有)     其他 连接数据库之后,可以采用migration管理第一次add-migration XX ...