SpringBoot AOP处理请求日志打印功能代码实例_java

来源:脚本之家  责任编辑:小易  

首先,需要将log4j先配置好在web.xml中加入解析器servlet的配置Java代码

设计原则和思路: 元注解方式结合AOP,灵活记录操作日志 能够记录详细错误日志为运营以及审计提供支持 日志记录尽可能减少性能影响 操作描述参数支持动态获取,其他参数自动记录。

一个方法 将所有的类都交由spring容器管理,或者用日志记录啊 log4j 或者slf4j随你

代码实例如下

老哥我也是这样毕设就是做这个折腾了一天原因是 依赖的问题<parent><

@Slf4j @Aspect @Configuration public class RequestAopConfig { @Autowired private HttpServletRequest request; private static final ThreadLocal<Long> START_TIME_MILLIS = new ThreadLocal<>(); @Pointcut("execution(* com.xxx.xxx.xxx..*(..)) " + "&&(@annotation(org.springframework.web.bind.annotation.PostMapping)" + "||@annotation(org.springframework.web.bind.annotation.GetMapping)" + "||@annotation(org.springframework.web.bind.annotation.PutMapping)" + "||@annotation(org.springframework.web.bind.annotation.DeleteMapping))") public void controllerMethodPointcut() { } /** * 前置通知:在某连接点之前执行的通知,但这个通知不能阻止连接点之前的执行流程(除非它抛出一个异常)。 * * @param joinPoint 参数 */ @Before("controllerMethodPointcut()") public void before(JoinPoint joinPoint) { START_TIME_MILLIS.set(System.currentTimeMillis()); } /** * 后置通知:在某连接点正常完成后执行的通知,通常在一个匹配的方法返回的时候执行。 * * @param joinPoint 参数 */ @AfterReturning(value = "controllerMethodPointcut()", returning = "result") public void afterReturning(JoinPoint joinPoint, Object result) { String logTemplate = "--------------- 执行成功 ---------------\n请求开始---Send Request URL: {}, Method: {}, Params: {} \n请求方法---ClassName: {}, [Method]: {}, execution time: {}ms \n请求结束---Send Response Result: {}"; log.info(logTemplate, request.getRequestURL(), request.getMethod(), JSON.toJSONString(joinPoint.getArgs()), joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName(), (System.currentTimeMillis() - START_TIME_MILLIS.get()), JSON.toJSONString(result)); START_TIME_MILLIS.remove(); } /** * 异常通知:在方法抛出异常退出时执行的通知。 * * @param joinPoint 参数 */ @AfterThrowing(value = "controllerMethodPointcut()", throwing = "ex") public void afterThrowing(JoinPoint joinPoint, Throwable ex) { String logTemplate = "--------------- 执行失败 ---------------\n异常请求开始---Send Request URL: {}, Method: {}, Params: {} \n异常请求方法---ClassName: {}, [Method]: {}, execution time: {}ms \n异常请求结束---Exception Message: {}"; log.error(logTemplate, request.getRequestURL(), request.getMethod(), JSON.toJSONString(joinPoint.getArgs()), joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName(), (System.currentTimeMillis() - START_TIME_MILLIS.get()), ex.getMessage()); START_TIME_MILLIS.remove(); } /** * 最终通知。当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。 * * @param joinPoint */ @After("controllerMethodPointcut()") public void after(JoinPoint joinPoint) { } }

引入AOP依赖<dependency> <groupId>

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

spring boot 使用AOP添加全局日志时,只要加了@Around注解,任何方法的返回值都是空的。怎么解决?

忘记调用JoinPoint的proceed()方法了吧。。。本回答被网友采纳

java aop 除了日志记录还有什么功能

aop常见的使用场景有如下:

  • 事务(Spring中的事务机制使用的就是AOP);

  • 请求合法性,判别用户的请求是否合法,比如做移动端接口开发时,用户登录成功后返回客户端Token,每次请求都需要携带这个Token;

  • 权限,访问某个方法时,判别是否有相应的权限

  • 错误处理,使用AOP对方法使用统一的错误处理。

以上只是常见的应用场景,根据AOP特性,结合项目的需求,灵活应用。

spring aop + log4j如何实现详细的后台操作日志,并输出的数据库

你可以采用logback 这个插件,可以任意切入哪个类,可以控制日志的级别。如果是业务操作日志最好是定义在Service层,DAO层就不要写业务了。

logback相比较log4j的优势

slf4j支持参数化的logger.error("帐号ID:{}不存在", userId);

告别了if(logger.isDebugEnable()) 时代。

另外logback的整体性能比log4j也较佳,hibernate等项目已经采用了slf4j。更多追问追答追问那请问ibatis可以使用吗?还有就是具体的操作,比如给service传入一个会员的POJO,其中比如要修改ID为1的用户密码,从原密码123,修改为456,,这个会员的po中就会放入两个属性一个是string的密码456,一个是id属性,其他属性不用管,既为null,比如说service方法成功执行以后,现在需要用到AOP,将这个service操作的具体信息拼接出来写入日志数据库,比如说将某ID的用户密码从123修改为了456,这个怎么才能实现~!请指教谢谢!追答Object[] args={123,456};

logger.debug("某ID的用户密码从{}修改为了{}",args);

这样写你看得懂吗?追问我现在切面只能反射到POJO对象,得不到其中的属性,比如ID或者password属性

想做一个使用spring aop功能来记录接口访问日志

你在百度搜 四湖论坛 希望对你有帮助

  • 本文相关:
  • springboot配置aop切面日志打印过程解析
  • springboot如何使用aop做访问请求日志
  • spring boot配置aop打印日志的全过程
  • springboot中使用aop打印接口日志的方法
  • 详解spring boot中使用aop统一处理web请求日志
  • spring-boot使用aop统一处理日志
  • spring学习笔记之bean的基础知识
  • java 桥模式(bridge pattern)详解
  • spring jpa和mybatis整合遇到的问题解析
  • spring里的async注解实现异步操作的方法步骤
  • java中的字符串常量池详细介绍
  • java采用中文方式显示时间的方法
  • spring boot启动加载数据原理分析
  • 原来java中有两个arraylist
  • mybatis integer类型参数值为0时得到为空的解决方法
  • java opencv实现人脸识别过程详解
  • spring boot 使用AOP添加全局日志时,只要加了@Around注解,任何方法的返回值都是空...
  • java aop 除了日志记录还有什么功能
  • spring aop + log4j如何实现详细的后台操作日志,并输出的数据库
  • 想做一个使用spring aop功能来记录接口访问日志
  • springmvc日志aop,springaop管理日志时候配置什么都配好报
  • spring用aop做系统日志,具体操作
  • 用spring aop做系统日志,但普通类不能拦截到
  • springboot启动的一个错误,请问该怎么解决!
  • springboot怎么添加一个aop事件
  • java开发怎么做日志功能 就是记录用户每一步的操作具体做什么了
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全c#教程vbvb.netc 语言java编程delphijavaandroidiosswiftscala易语言汇编语言其它相关首页javaspringboot配置aop切面日志打印过程解析springboot如何使用aop做访问请求日志spring boot配置aop打印日志的全过程springboot中使用aop打印接口日志的方法详解spring boot中使用aop统一处理web请求日志spring-boot使用aop统一处理日志spring学习笔记之bean的基础知识java 桥模式(bridge pattern)详解spring jpa和mybatis整合遇到的问题解析spring里的async注解实现异步操作的方法步骤java中的字符串常量池详细介绍java采用中文方式显示时间的方法spring boot启动加载数据原理分析原来java中有两个arraylistmybatis integer类型参数值为0时得到为空的解决方法java opencv实现人脸识别过程详解java使double保留两位小数的多方java8 十大新特性详解java.net.socketexception: connjava写入文件的几种方法分享java环境变量的设置方法(图文教程java 十六进制与字符串的转换java list用法示例详解java中file类的使用方法javaweb实现文件上传下载功能实例java 字符串截取的三种方法(推荐springboot下的值注入(推荐)lucene实现索引和查询的实例讲解jni实现最简单的java调用c/c++代码java实现计算器功能android中比较常见的java super关键字java基础教程之组合(composition)java集合set、list、map的遍历方法java语言实现简单ftp软件 辅助功能模块ft详解spring data jpa使用@query注解(usijava检测线程中断状态的方法示例
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved