springboot+log4j统一处理请求日志(AOP)
项目当中经常需要对请求日志进行统一处理,以便能够及时的掌握项目功能情况,下面简单介绍springboot利用log4j如何用AOP对所有请求统一记录。
1. springboot集成log4j
2. 导入AOP依赖
<!-- AOP --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
3. WebLogAspect切面类
@Aspect @Component//配置bean public class WebLogAspect { private Logger logger = Logger.getLogger(getClass()); @Pointcut("execution(public * com.test.controller..*.*(..))") public void webLog() { } @Before("webLog()") public void doBefore(JoinPoint joinPoint) throws Throwable { // 接收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); // 记录下请求内容 logger.info("---------------request----------------"); logger.info("URL : " + request.getRequestURL().toString()); logger.info("HTTP_METHOD : " + request.getMethod()); logger.info("IP : " + request.getRemoteAddr()); Enumerationenu = request.getParameterNames(); while (enu.hasMoreElements()) { String name = (String) enu.nextElement(); logger.info("name:" + name + " - value:" + request.getParameter(name)); } } @AfterReturning(returning = "ret", pointcut = "webLog()") public void doAfterReturning(Object ret) throws Throwable { logger.info("---------------response----------------"); // 处理完请求,返回内容 logger.info("RESPONSE : " + ret); logger.info("花费时间 : " + (System.currentTimeMillis() - startTime.get()) + "毫秒"); } }
通过@Pointcut定义切入点,此处是com.test.controller包下的所有Controller(对controller层所有请求处理做切入点),然后通过@Before实现对请求内容的日志记录,最后通过@AfterReturning记录请求返回的对象。
这样所有功能的请求参数,返回数据,以及运行时间等都可以统一记录,不需要在每个方法去单独处理。
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。