springboot 写一个日志切面,能够将访问的地址,参数所有相关访问信息都打印在控制台
时间: 2024-02-23 21:01:17 浏览: 74
php代码-php将所有的请求参数打印记录到日志文件
好的,下面是一个简单的示例代码,用于实现Spring Boot中的日志切面:
首先,我们需要定义一个切面类,并在其中编写切面逻辑:
```java
@Aspect
@Component
public class LoggingAspect {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Pointcut("execution(* com.example.controller..*.*(..))")
public void controllerMethod() {}
@Around("controllerMethod()")
public Object logControllerMethodAccess(ProceedingJoinPoint joinPoint) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String url = request.getRequestURL().toString();
String httpMethod = request.getMethod();
String remoteAddr = request.getRemoteAddr();
Object[] args = joinPoint.getArgs();
StringBuilder params = new StringBuilder();
for (Object arg : args) {
params.append(arg.toString()).append(";");
}
long startTime = System.currentTimeMillis();
Object result = joinPoint.proceed();
long endTime = System.currentTimeMillis();
logger.info("Request URL: {}, HTTP Method: {}, Remote Address: {}, Parameters: {}, Response Time: {} ms", url, httpMethod, remoteAddr, params.toString(), endTime - startTime);
return result;
}
}
```
上述代码中,我们使用了`@Aspect`注解来标识这是一个切面类,并使用`@Component`注解将其声明为Spring Bean。接着,我们定义了一个切点`controllerMethod()`,用于匹配所有Controller类中的方法。最后,我们在`controllerMethod()`切点上使用了`@Around`注解,表示这是一个环绕通知,即在Controller方法执行前后都会执行。
在`@Around`注解中,我们首先获取了请求的URL、HTTP Method和远程地址等信息,然后将请求参数转换为字符串,并在执行Controller方法前记录当前时间。在Controller方法执行完成后,我们再记录当前时间并计算出响应时间,最后将所有信息以日志的形式输出到控制台中。
最后,我们需要在Spring Boot的配置文件中开启AOP:
```yaml
spring:
application:
name: demo
aop:
auto: true
```
这样,当我们启动Spring Boot应用时,就能够看到所有Controller方法的访问信息被打印在控制台中了。
阅读全文