SpringAOP的应用-日志管理
2021-05-05 10:29
标签:耦合性 内容 class 操作 control demo cto 返回 system 操作日志对于程序员或管理员而言,可以快速定位到系统中相关的操作,而对于操作日志的管理的实现不能对正常业务实现进行影响,否则即不满足单一原则,也会导致后续代码维护困难,因此我们考虑使用AOP切面技术来实现对日志管理的实现。使用SpringAOP动态代理,在不影响源代码的前提下,打印日志,源代码的改变不影响动态代码,耦合性低 控制层代码: 日志管理类: SpringAOP的应用-日志管理 标签:耦合性 内容 class 操作 control demo cto 返回 system 原文地址:https://www.cnblogs.com/mcjhcnblogs/p/13192926.html一、作用
二、代码如下:
/**
*
* @version: 1.1.0
* @Description: 控制层类
* @author: wsq
* @date: 2020年6月25日下午8:56:44
*/
@RestController
public class LogTestController {
@GetMapping("/logTest")
public void logTest(@RequestParam("id") int id, @RequestParam("name") String name) {
System.out.println("id:" + id + " " + "name:" + name);
}
@GetMapping("/logTest2")
public void logTest2(@RequestParam("id2") int id, @RequestParam("name2") String name) {
System.out.println("id2:" + id + " " + "name2:" + name);
}
}
/**
*
* @version: 1.1.0
* @Description: 日志管理类
* @author: wsq
* @date: 2020年6月25日下午8:57:22
*/
@Component
@Aspect
public class WebLogAspect {
// 创建日志
private final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
@Pointcut("execution(* com.example.demo.controller..*.*(..))")
public void logTestController() {
}
// 怎样操作传入参数
@Before("logTestController() && args(id, name)")
public void logTestControllerBefore(JoinPoint joinPoint, int id, String name) {
System.err.println(id);
System.err.println(name);
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
HttpServletRequest httpServletRequest = ((ServletRequestAttributes) requestAttributes).getRequest();
// 记录下请求内容
logger.info("#############URL:" + httpServletRequest.getRequestURI().toString());
logger.info("#############HTTP_METHOD:" + httpServletRequest.getMethod());
logger.info("#############IP:" + httpServletRequest.getRemoteAddr());
logger.info("#############THE ARGS OF THE CONTROLLER:" + Arrays.toString(joinPoint.getArgs()));
// 下面这个getSignature().getDeclaringTypeName()是获取包+类名的
// 然后后面的joinPoint.getSignature.getName()获取了方法名
logger.info("################CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "."
+ joinPoint.getSignature().getName());
logger.info("################TARGET: " + joinPoint.getTarget());// 返回的是需要加强的目标类的对象
logger.info("################THIS: " + joinPoint.getThis());// 返回的是经过加强后的代理类的对象
}
}