利用切面拦截输出异常状态时的信息,当接口状态异常时打印固定日志” SERVICE UNHEALTH“和具体信息
时间: 2024-01-01 09:03:56 浏览: 68
可以使用 AOP(面向切面编程)来实现这个功能。具体实现步骤如下:
1. 定义一个注解,用于标记需要拦截的方法或类。
```java
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ExceptionLog {
}
```
2. 定义一个切面类,实现异常拦截和日志输出的功能。
```java
@Aspect
@Component
public class ExceptionLogAspect {
private static final Logger logger = LoggerFactory.getLogger(ExceptionLogAspect.class);
@Around("@annotation(com.example.demo.annotation.ExceptionLog)")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
Object result;
try {
result = pjp.proceed();
} catch (Exception e) {
logger.error("SERVICE UNHEALTH: {}", e.getMessage());
throw e;
}
return result;
}
}
```
3. 在需要拦截的方法或类上添加注解。
```java
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user/{id}")
@ExceptionLog
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
}
```
这样,当 `getUserById` 方法抛出异常时,会自动执行切面 `ExceptionLogAspect` 中的 `around` 方法,并输出日志 "SERVICE UNHEALTH" 和具体信息。同时,如果该方法没有抛出异常,则正常返回结果。
阅读全文