SpringBoot做日志拦截
时间: 2023-11-19 12:15:06 浏览: 85
SpringBoot的拦截器
在SpringBoot中,可以通过AOP来实现日志拦截。具体实现步骤如下:
1. 定义切面类,实现@Before、@After等切面注解。
2. 在切面类中定义切入点,指定需要拦截的方法。
3. 在切面类中实现拦截逻辑,可以使用日志框架输出日志信息。
4. 在SpringBoot启动类中添加@EnableAspectJAutoProxy注解开启AOP。
下面是一个简单的示例代码,演示如何通过AOP实现日志拦截:
```java
@Aspect
@Component
public class LogAspect {
private static final Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Pointcut("execution(public * com.example.demo.controller..*.*(..))")
public void webLog() {}
@Before("webLog()")
public void doBefore(JoinPoint joinPoint) {
// 获取请求url
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String url = request.getRequestURL().toString();
logger.info("Request URL: {}", url);
// 获取请求参数
Object[] args = joinPoint.getArgs();
StringBuilder sb = new StringBuilder();
for (Object arg : args) {
sb.append(arg.toString()).append(",");
}
logger.info("Request Args: {}", sb.toString());
}
@AfterReturning(returning = "result", pointcut = "webLog()")
public void doAfterReturning(Object result) {
logger.info("Response: {}", result.toString());
}
}
```
在上面的示例代码中,我们定义了一个名为LogAspect的切面类,使用@Aspect注解标记该类为切面类。使用@Component注解将该类交给Spring容器管理。
在切面类中,我们定义了一个名为webLog的切入点,指定了需要拦截的方法。在@Before注解中实现了请求日志的输出,在@AfterReturning注解中实现了响应日志的输出。
最后,在SpringBoot启动类中添加@EnableAspectJAutoProxy注解,开启AOP。
阅读全文