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. CCD 与 CMOS

    窗帘快门与全局快门: 窗帘快门,每次只允许一条缝的光线摄入,因此会呈现自上而下的扫描式拍摄,也就意味着画面上的不同高度,其实拍摄的时间是不同的,也就进一步造成了在高速移动的火车上,如果拍摄窗外的景物, ...

  2. 1-5设定NetCore监听端口

    问题的起源:启动一个.netCore项目,默认使用的是5000端口,当我们有很多个项目的时候(集群),不可能都使用5000端口. 方法1:set ASPNETCORE_URLS=http://127. ...

  3. OpenCV图像修复

    在OpenCV的"photo.hpp"中定义了一个inpaint函数,可以用来实现图像的修复和复原功能,inpaint函数的原型如下: void inpaint( InputArr ...

  4. WPF:将Office文档、任意类型文件嵌入到EXE可执行文件中

    原文:WPF:将Office文档.任意类型文件嵌入到EXE可执行文件中 版权声明:本文为博主原创文章,未经博主允许可以随意转载 https://blog.csdn.net/songqingwei198 ...

  5. python 教程 第五章、 函数

    第五章. 函数 定义语句后面要加冒号 1)    定义函数 def sayHello(): print 'Hello World!' sayHello() 2)    变量作用域 LEGB原则 L本地 ...

  6. WPF开发之限制输入的控件---------转自CDSN

    原文地址 http://blog.csdn.net/ghosind/article/details/51627601 作者 ghosind 一,正则表达式过滤字符串 if (RegexString = ...

  7. miniui处理多重子表级联,一次性提交多表数据的ui要点

    在一个ui界面上 有a,b,c三个表 a表只有一条记录,b表有多条记录,c表有多条记录 b是a的子表,c是b的子表 都是一对多关系 一次性下载相关联的c表记录 然后mini-datagrid采用cli ...

  8. SpringMvc 资料

    web.xml解释 http://www.cnblogs.com/superjt/p/3309255.html url-pattern解释 http://www.cnblogs.com/zhangpe ...

  9. WPF Aero Glass Window

    原文:WPF Aero Glass Window 用法 Win7 DwmSetWindowAttribute function Win10 SetWindowCompositionAttribute ...

  10. ASP.NET MVC控制器Controller

    控制器的定义 MVC模式下的控制器(Controller)主要负责响应用户的输入,并且在响应时可能的修改模型(Model). 之前的URL访问,通常是通过指定服务器的路径来实现,如访问URL:http ...