Spring Boot 自定义注解使用场景介绍,通过自定义注解实现日志记录

Spring Boot自定义注解的使用场景主要包括以下几个方面:

        1、服务治理:如前面所提到的服务限流、服务熔断等。通过自定义注解,可以很方便地对服务进行治理,提高系统的稳定性和可用性。

        2、权限控制:自定义注解可以用于方法的权限控制。例如,通过自定义注解来标记某个方法需要特定的角色或权限才能访问,可以简化权限控制的代码,并提高代码的可读性。

        3、日志记录:通过自定义注解,可以方便地记录方法的调用日志。例如,可以在方法的入参和出参上添加自定义注解,然后在切面中解析注解,记录相关的日志信息。

        4、参数校验:在某些场景下,可能需要对方法的参数进行校验。通过自定义注解,可以很方便地实现对参数的校验。例如,可以定义一个校验注解,然后在切面中解析注解,对参数进行相应的校验。

        5、缓存控制:自定义注解还可以用于缓存控制。例如,通过自定义注解来标记某个方法的返回值需要被缓存,或者在某个条件下需要清除缓存。

        6、自定义业务逻辑:除了上述的场景,自定义注解还可以用于实现各种自定义的业务逻辑。只要是通过注解和切面能够实现的功能,都可以作为自定义注解的使用场景。

        下面展示一个通过自定义注解实现日志记录

  • 定义自定义注解

        首先,定义一个用于日志记录的自定义注解,例如@Log。这个注解可以包含一些元数据,例如日志消息、日志级别等。

import java.lang.annotation.*;  
  
@Target(ElementType.METHOD)  
@Retention(RetentionPolicy.RUNTIME)  
public @interface Log {  
    String value() default ""; // 默认日志消息  
    LogLevel level() default LogLevel.INFO; // 默认日志级别  
}  
  
// 定义日志级别枚举  
public enum LogLevel {  
    INFO, DEBUG, ERROR  
}
  • 实现日志记录切面

        创建一个切面,例如LoggingAspect,来处理日志记录的逻辑。这个切面应该包含一个通知(Advice),它会在被注解的方法被调用之前、之后或抛出异常时执行。

import org.aspectj.lang.JoinPoint;  
import org.aspectj.lang.annotation.*;  
import org.slf4j.Logger;  
import org.slf4j.LoggerFactory;  
import org.springframework.stereotype.Component;  
  
@Aspect  
@Component  
public class LoggingAspect {  
  
    private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);  
  
    @Before("@annotation(log)")  
    public void logBefore(JoinPoint joinPoint, Log log) {  
        // 在方法调用前记录日志  
        switch (log.level()) {  
            case INFO:  
                logger.info(buildLogMessage(joinPoint, log));  
                break;  
            case DEBUG:  
                logger.debug(buildLogMessage(joinPoint, log));  
                break;  
            case ERROR:  
                logger.error(buildLogMessage(joinPoint, log));  
                break;  
        }  
    }  
  
    // 如果有需要,你还可以添加 @After, @AfterReturning, @AfterThrowing 等通知方法,来在方法调用后、返回后、抛出异常后记录日志。  
      
    private String buildLogMessage(JoinPoint joinPoint, Log log) {  
        // 构建日志消息,这里只是一个简单示例,你可以根据实际需要调整日志消息的格式和内容。  
        return String.format("[Log] %s is called with args: %s. Log message: %s",   
            joinPoint.getSignature().getName(), joinPoint.getArgs(), log.value());  
    }  
}
  • 应用自定义注解

        现在你可以在任何需要日志记录的方法上使用@Log注解。例如:

@Service  
public class MyService {  
    @Log(value = "This method is called.", level = LogLevel.DEBUG)  
    public String myMethod(String arg1, int arg2) {  
        // 方法逻辑...  
        return "Result";  
    }  
}

        在这个例子中,每次myMethod被调用时,都会记录一条调试级别的日志,日志消息为"This method is called."。同时,你可以通过改变value和level来调整日志消息和日志级别。你也可以在更多的方法上使用这个注解,来实现统一的日志记录功能。

https://dev.csdn.net/activity?utm_source=sale_source&sale_source=Skq3e7udPl"><img src="https://img-home.csdnimg.cn/images/20220518054835.png

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guochangjin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值