SpringAOP的应用-日志管理

2021-05-05 10:29

阅读:538

标签:耦合性   内容   class   操作   control   demo   cto   返回   system   

一、作用

操作日志对于程序员或管理员而言,可以快速定位到系统中相关的操作,而对于操作日志的管理的实现不能对正常业务实现进行影响,否则即不满足单一原则,也会导致后续代码维护困难,因此我们考虑使用AOP切面技术来实现对日志管理的实现。使用SpringAOP动态代理,在不影响源代码的前提下,打印日志,源代码的改变不影响动态代码,耦合性低

二、代码如下:

控制层代码:

/**
 * 
 * @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());// 返回的是经过加强后的代理类的对象
    }
}

 

SpringAOP的应用-日志管理

标签:耦合性   内容   class   操作   control   demo   cto   返回   system   

原文地址:https://www.cnblogs.com/mcjhcnblogs/p/13192926.html


评论


亲,登录后才可以留言!