Springboot使用AOP实现统一处理Web请求日志
1.要使我们自定义的记录日志能够打印出来,我们需要先排除springboot默认的记录日志,添加如下的设置

2.新建 resources/log4j.properties
我的设置为:
# LOG4J\u914D\u7F6E
log4j.rootCategory=INFO, stdout, file, errorfile
log4j.category.com.wutongshu=DEBUG, bootfile
log4j.logger.error=errorfile # \u63A7\u5236\u53F0\u8F93\u51FA
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{}:%L - %m%n # root\u65E5\u5FD7\u8F93\u51FA
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.file=logs/all.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{}:%L - %m%n # error\u65E5\u5FD7\u8F93\u51FA
log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorfile.file=logs/error.log
log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd
log4j.appender.errorfile.Threshold = ERROR
log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout
log4j.appender.errorfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{}:%L - %m%n # com.springboot\u4E0B\u7684\u65E5\u5FD7\u8F93\u51FA
log4j.appender.bootfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.bootfile.file=logs/my.log
log4j.appender.bootfile.DatePattern='.'yyyy-MM-dd
log4j.appender.bootfile.layout=org.apache.log4j.PatternLayout
log4j.appender.bootfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{}:%L ---- %m%n
3.然后创建Web层日志切面类,这里我设置的是controller层的所有请求都会打印日志信息
其中@Order(i)表示AOP切面的优先级
在切入点前的操作,按order的值由小到大执行
在切入点后的操作,按order的值由大到小执行
/**
* 日志切面类
*/
@Aspect
@Component
@Order()
public class WebLogAspect {
private Logger logger=Logger.getLogger(getClass()); private ThreadLocal<Long> startTime=new ThreadLocal<>(); @Pointcut("execution(public * com.*.*.web.*.*(..))")
public void webLog(){ } @Before(value = "webLog()")
public void doBefore(JoinPoint point){
startTime.set(System.currentTimeMillis()); logger.info("WebLogAspect.doBefore............");
ServletRequestAttributes attributes=
(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request=attributes.getRequest();
logger.info("IP : "+request.getRemoteAddr());
logger.info("URL:" + request.getRequestURL().toString());
logger.info("HTTP_METHOD:" +request.getMethod());
logger.info("CLASS_NAME : " + point.getSignature().getDeclaringTypeName()+"."+point.getSignature().getName());
logger.info("ARGS : " + Arrays.toString(point.getArgs()));
} @AfterReturning(value = "webLog()",returning = "ret")
public void doAferReturning(Object ret){
logger.info("WebLogAspect.doAfterReturning.............");
logger.info("Resp: " + ret);
logger.info("Spend Time : " + (System.currentTimeMillis()-startTime.get()));
}
}
4.输入http://localhost:8087/test/hello进行测试
可看到控制台输出依次打印出IP,URL,请求方法,请求路径,方法入参以及花费的时间

Springboot使用AOP实现统一处理Web请求日志的更多相关文章
- Springboot中使用AOP统一处理Web请求日志
title: Springboot中使用AOP统一处理Web请求日志 date: 2017-04-26 16:30:48 tags: ['Spring Boot','AOP'] categories: ...
- 46. Spring Boot中使用AOP统一处理Web请求日志
在之前一系列的文章中都是提供了全部的代码,在之后的文章中就提供核心的代码进行讲解.有什么问题大家可以给我留言或者加我QQ,进行咨询. AOP为Aspect Oriented Programming的缩 ...
- (转)Spring Boot中使用AOP统一处理Web请求日志
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是Spring框架中的一个重要内容,它通 ...
- SpringBoot2.0 使用AOP统一处理Web请求日志(完整版)
一,加入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- Spring Boot中使用AOP统一处理Web请求日志
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是Spring框架中的一个重要内容,它通 ...
- Spring Boot2.0之统一处理web请求日志
试问,你的项目中,如果有几万个方法,你还这么写log.info("name"+name+",age"+age )日志么?low~ 所以用AOP呀 1.首先创建个 ...
- springboot Aop 统一处理Web请求日志
1.增加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- 转:Spring Boot中使用AOP统一处理Web请求日志
在spring boot中,简单几步,使用spring AOP实现一个拦截器: 1.引入依赖: <dependency> <groupId>org.springframewor ...
- spring Boot使用AOP统一处理Web请求日志记录
1.使用spring boot实现一个拦截器 1.引入依赖: <dependency> <groupId>org.springframework.boot</grou ...
随机推荐
- ASP.NET Cache 实现依赖Oracle的缓存策略
ASP.NET 中的缓存提供了对SQL依赖项的支持,也就是说当SQL SERVER数据库中的表或行中的数据被更改后,缓存中的页面就失效,否则,页面输出可一直保留在缓存当中.这确实为程序员提供了方便.但 ...
- JNDI连接池连接Oracle数据库
今天做了一个评论的小功能,要求用JNDI连接池连接Oracle数据库,以前只是测试了是否连接的上,现在没想到一个JNDI连接池连接Oracle数据库,纠结了好久,原来都是Oracle数据库的问题,这是 ...
- 统计:mAP的中文意思
原文链接:http://blog.csdn.net/Lu597203933/article/details/41802155 之前写过一篇blog叫做机器学习实战笔记之非均衡分类问题:http://b ...
- SLAM: SLAM的发展历程(WIKI)
参考维基百科: https://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping 你们叫他SLAM,我还是习惯叫他三维重建.... ...
- VS2013(Win10X64)-配置编译Caffe
主要看这篇文章,有点小瑕疵,瑕不掩瑜.参考链接:http://www.bubuko.com/infodetail-902302.html 文中红色标记为文章小瑕疵的地方,在此文中标记出来,做为修改对上 ...
- Android 性能测试初探(三)
书接上文 Android 性能测试初探(二) 本文接着往下聊,今天主聊 CPU 及 内存 看到这两个名词,做过PC性能测试的就比较熟悉了,同样的性能测试关注点 :) 首先说说内存,移动端关注的是内存消 ...
- BZOJ4756 [USACO17JAN]Promotion Counting晋升者计数
Description The cows have once again tried to form a startup company, failing to remember from past ...
- Network-Flow
//Created by pritry int graph[MAX][MAX]; //原图 int source; //起点,这里为0 int sink; //终点,这里为n-1 int e[MAX] ...
- Golang - 流程控制
目录 Golang - 流程控制 1. 选择结构 2. 循环结构 3. 跳转语句 Golang - 流程控制 1. 选择结构 if else语句: //package 声明开头表示代码所属包 pack ...
- 暑假集训D12总结
刷题 今天终于不考试= = 上午刷了一大圈线段树板子题,于是算是学会了Zkw线段树= = 下午昨天的dalao又来讲几何,然而仍然没有笔记= = 于是刷了一大圈计算几何的水题= =,并没哟啥可以写出题 ...