AOP实现全局日志功能
1、先创建一个注解
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLog {
String value() default "";
}
2、创建一个切面类
@Aspect
@Order(5)
@Component
public class LogAspect {
private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
private ThreadLocal<Long> startTime = new ThreadLocal();
public WebLogAspect() {
}
//定义pointCut
@Pointcut("@annotation(SysLog全类名)")
public void webLog() {
}
}
3、通知方法
//前置通知 @Before
@Before("webLog()")
public void doBefore(JoinPoint joinPoint) {
try {
//自定义操作
} catch (Exception var10) {
logger.error(var10.getMessage());
}
}
//后置通知,此处同上
@After("webLog()")
//返回通知 @AfterReturning
//定义返回参数 object ret
@AfterReturning(
returning = "ret",
pointcut = "webLog()"
)
public void doAfterReturning(Object ret) {
try {
//自定义操作
} catch (Exception var4) {
logger.error(var4.getMessage());
}
}
//异常通知 @AfterThrowing 此处同上
//环绕通知 @Around
public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
try {
Object obj = proceedingJoinPoint.proceed();
return obj;
} catch (Exception var3) {
logger.error(var3.getMessage());
throw var3;
}
}
4、使用
在要记录日志方法上加上@SysLog()注解