上一篇介绍了springboot整合Mybatis例子,这一篇在上一篇的基础上,简单修改部分实现日志信息的打印。

随着项目功能的一点点增加,打印日志信息就非常必要了,可以帮助我们很快确定哪里出现了问题,这里使用slf4j来打印日志。

AOP即面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。如果几个或更多个逻辑过程中,有重复的操作行为,AOP就可以提取出来,运用动态代理,实现程序功能的统一维护,这样就非常方便了,在实现主业务过程中无需为一些零碎的但必不可少的旁支功能打扰,而是后期横切进去,这里接上一篇的代码来做,可以看出这个特点,对上一篇的代码没有做任何修改而成功打印出所需要的日志信息。关于AOP的更多知识,可以参考:理解Spring中的IOC和AOP。

接下来还是通过例子实现来看一看springboot如何使用AOP打印日志信息,接上一篇springboot学习(6)springboot整合Mybatis例子

首先,引入AOP的依赖包

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-aop</artifactId>
</dependency> 

新建一个HttpAspect类,放在aspect包下:

package org.amuxia.aspect;import javax.servlet.http.HttpServletRequest;import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;@Aspect
@Component
public class HttpAspect {private Logger logger = LoggerFactory.getLogger(this.getClass());@Pointcut("execution(public * org.amuxia.controller.ItemsController1.*(..))")public void myLog() {}@Before("myLog()")public void reqMessage() {ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();logger.info("*********打印请求信息开始**********");logger.info("URL : " + request.getRequestURL().toString());logger.info("HTTP_METHOD : " + request.getMethod());logger.info("*********打印请求信息结束**********");}@AfterReturning(returning="object",pointcut="myLog()")public void resMessage(Object object) {logger.info("*********打印结果信息开始**********");logger.info("RESULT:"+ object);logger.info("*********打印结果信息结束**********");}}

就这样,其余代码都不变,我们运行之后,输入http://localhost:8080/items1/list,控制台显示打印信息如下:

2017-12-24 16:59:41.070  INFO 6376 --- [nio-8080-exec-1] org.amuxia.aspect.HttpAspect
: *********打印请求信息开始**********
2017-12-24 16:59:41.070  INFO 6376 --- [nio-8080-exec-1] org.amuxia.aspect.HttpAspect
: URL : http://localhost:8080/items1/list
2017-12-24 16:59:41.070  INFO 6376 --- [nio-8080-exec-1] org.amuxia.aspect.HttpAspect
: HTTP_METHOD : GET
2017-12-24 16:59:41.070  INFO 6376 --- [nio-8080-exec-1] org.amuxia.aspect.HttpAspect
: *********打印请求信息结束**********
2017-12-24 16:59:41.373  INFO 6376 --- [nio-8080-exec-1] org.amuxia.aspect.HttpAspect
: *********打印结果信息开始**********
2017-12-24 16:59:41.373  INFO 6376 --- [nio-8080-exec-1] org.amuxia.aspect.HttpAspect
: RESULT:ModelAndView: reference to view with name 'items';
model is {list=[Items [id=1, title=学习springboot, name=阿木侠, detail=说点儿什么呢],
Items [id=2, title=我是一个标题, name=阿木侠, detail=我是内容,写点儿什么好呢],
Items [id=3, title=我也是标题, name=阿木侠, detail=荷塘啊荷塘],
Items [id=4, title=修改后的标题, name=amuxia, detail=修改后的内容],
Items [id=6, title=这是新增的标题, name=阿木侠, detail=这是新增的内容],
Items [id=13, title=花开花谢, name=花酒, detail=凄凄惨惨戚戚]]}
2017-12-24 16:59:41.373  INFO 6376 --- [nio-8080-exec-1] org.amuxia.aspect.HttpAspect
: *********打印结果信息结束**********

我们可以看到,已经成功将运行日志打印出来了。


代码不多,都非常容易理解,下面对上面用到的一些注解进行简单的介绍:

@Aspect    作用是把当前类标识为一个切面供容器读取。

@Before     标识一个前置增强方法,相当于BeforeAdvice的功能,从切入点开始处切入内容。

@AfterReturning      后置增强,相当于AfterReturningAdvice,方法正常退出时执行。

@Pointcut      定义一个切入点,可以是一个规则表达式,也可以是一个注解等。

springboot使用AOP打印日志信息相关推荐

  1. springboot启动不打印日志信息_SpringBoot启动信息没有打印到日志文件中,怎么回事?...

    我的一个SpringCloud工程下一个SpringBoot程序,logback配置文件如下,在IDEA中,dev环境下启动的日志会打印在IDEA下的窗口中,但是配置了logback,要在测试机上pr ...

  2. springboot启动不打印日志信息_springboot项目大量打印debug日志问题

    目前,java下应用最广泛的日志系统主要就是两个系列: log4j和slf4j+logback . 其中,slf4j只包含日志的接口,logback只包括日志的具体实现,两者加起来才是一个完整的日志系 ...

  3. springboot启动不打印日志信息_SpringBoot日志操作【全局异常捕获消息处理--日志控制台输出+日志文件记录】...

    引言 看到一篇blog,感觉写的角度非常好,因此引用过来消化一番.

  4. aop springboot 传入参数_java相关:springboot配置aop切面日志打印过程解析

    java相关:springboot配置aop切面日志打印过程解析 发布于 2020-3-31| 复制链接 摘记: 这篇文章主要介绍了springboot配置aop切面日志打印过程解析,文中通过示例代码 ...

  5. SpringBoot利用Aop打印入参出参日志

    SpringBoot利用Aop打印入参出参日志 前言 以前写代码不会用Aop的时候,记录入参出参的日志打印都是在Controller中完成的,每个Controller的方法开始之前先打印个日志,然后方 ...

  6. springBoot Aop打印日志

    springBoot Aop打印日志 1.类上加@Aspect,@Component注解 2.@Pointcut()定义一个切点,里面填写路径,一般是所有controller中的所有方法,所有的参数 ...

  7. springboot项目输入打印日志文件到本地

    springboot项目输入打印日志文件到本地 pom.xml中添加jar包: <dependency><groupId>ch.qos.logback</groupId& ...

  8. Android逆向笔记-Proguard混淆Android代码以及去打印日志信息

    本笔记只记录其现象和功能,不记录具体怎么去用他. 这个Proguard全称应该是project guard,用来混淆Android代码的.如下未使用Proguard的类: 使用Proguard后: 这 ...

  9. springBoot+AOP收集日志信息,自定义接口实现日志收集

    之前做的ELK日志分析,没有收集到日志,都 是一些没有规则的输出,提取数据也相对复杂, 今天 有时间就稍微实现了一下利用SpringBoot Aop的方式打印想要的数据格式, 第一步,自定义接口, E ...

最新文章

  1. P2240 【深基12.例1】部分背包问题(贪心)难度⭐
  2. 如何提升网站在搜索引擎中的排名?
  3. 201521123078《Java程序设计》第2周学习总结
  4. python cnn模型_ZfNet解卷积:可视化CNN模型( PythonCode可视化Cifar10)
  5. 【主题演讲】探索云、视频会议,编解码的奥妙
  6. 迷你型MINI光纤收发器的优势有哪些?
  7. 自动化测试之一----基本概念
  8. mysql数据库命令大全菜鸟_mysql常用命令
  9. Python unittest基本框架组成(1)
  10. 赛码网编程题--打字(Java全A)
  11. noob_Noob的Three.js指南
  12. 史上最全的程序员求职渠道总结
  13. 微信公众平台iPhone版内测开始了
  14. Android实时音视频如何快速实现回声消除
  15. System.InvalidOperationException: Timeout expired. Max Size Pool connections.
  16. 鼠标滑轮控制Div水平滚动
  17. Extjs中利用combobox实现全国省市级联
  18. elo匹配算法c语言,匹配算法全面解析:采用国际通用“ELO等级分系统”
  19. 字节青训营第三课之高质量编程与性能调优实战的笔记和总结
  20. 【MAX7800与ESP8266mcu通讯关键字控制】

热门文章

  1. 郎朗钢琴课独家上线知乎 手把手带你开启钢琴之路
  2. 库克斯坦福大学毕业演讲批评硅谷现状:我们有责任改变方向
  3. 狂奔的瑞幸咖啡讲了一个好故事 但还缺失一种 “感觉”
  4. B站陈睿:70 后也正在爱上哔哩哔哩
  5. 万达影视发布声明:不存在所谓的从《流浪地球》撤资
  6. C和C++的互相调用【原创】
  7. 转:Redis使用认证密码登录
  8. threejs引擎中 环境光线与管道流动
  9. nodejs实践录:pm2使用
  10. onvif学习笔记7:一个C++封装的onvif代码的阅读笔记