springboot面向切面编程AOP日志

springboot面向切面编程AOP

导入依赖

<!--AOP-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

AOP拦截处理类

/**
 * @Aspect 这是一个切面
 * @Component 放入component中,springboot才能自动注入
 */
@Aspect
@Component
public class AopAspect {
	private static final Logger logger= LoggerFactory.getLogger(AopAspect.class);
    
    // 添加service
    @Autowired
    private UserService userService;

    // 切入点:checkUser
    // @annotation(com.carter.annotation.AopAnnotation)(不美观)
    // 通常用表达式 *是通配符
    @Pointcut("execution(* com.carter.service.*.*(..))")
    public  void checkService(){
		logger.info("拦截请求start");
    }
    // 前置通知  joinPoint:获取拦截的方法
    @Before("checkService()")
    public void check(JoinPoint joinPoint){
        System.out.println("执行"+joinPoint+"方法之前...");
    }
}

AOP术语

在这里插入图片描述

@Before(“前置通知”) // 运行异常,将不执行

@After(“后置通知”) // 不管是否正常运行,都会执行

@AfterReturning(“返回通知”) // 返回值正常时执行

@AfterThrowing(“异常通知”) // 出现异常后执行

@Around // 环绕通知(有前,有后)

在这里插入图片描述

slf4j日志打印

  • yaml中的配置
// 控制台输出
logging.pattern.console="%d - %msg%n"  // %d:日期,-:就是一个杠,%msg:日志内容,%n:换行
// 输出到文件中
logging.file.name="文件输出的名字"
logging.file.path="文件输出的日志"

不使用与spring2.1.0的lombok插件

环境配置

<!--日志-->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
</dependency>
    <!--简单日志门面-->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
</dependency>

properties配置

%d日期 %p级别 %n回车 %msg信息

#开启debug层的日志打印
logging:
  level:
    com:
      carter:
        dao: debug
  pattern:
    #控制台输出格式
    console: "%d 【%p】 %msg%n"
    #日志文件输出格式
    file: "%d 【%p】 %msg%n"
    #日志输出的路径
  path: C:\Users\海角天涯S\Desktop\springcloud-shop
  	#日志的名字
  file: C:\Users\海角天涯S\Desktop\springcloud-shop\consumer.log
2020-09-24 16:31:47,186 【ERROR】 Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is feign.RetryableException: Read timed out executing GET http://product-service/product/queryAllProduct?currPage=1&pageSize=6] with root cause

java.net.SocketTimeoutException: Read timed out
	at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_45]

cause

java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_45]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 提供了很好的支持来实现面向切面编程面向切面编程AOP)是一种编程范式,它允许将横跨多个业务逻辑的功能(例如日志记录、事务管理等)从应用程序的核心业务逻辑中分离出来,以提高代码的可重用性、模块化和可维护性。 在 Spring Boot 中,你可以使用 Spring AOP 来实现面向切面编程。Spring AOP 基于代理模式,通过在目标对象上动态生成一个代理对象来实现切面功能。Spring AOP 提供了很多注解来定义切面、切入点、通知等。 下面是一个简单的面向切面编程的示例,它演示了如何在 Spring Boot 中使用 AOP 记录方法的执行时间: 1. 定义一个切面类,使用 @Aspect 注解标记,定义一个切入点,使用 @Pointcut 注解标记: ``` @Aspect @Component public class LogAspect { @Pointcut("execution(* com.example.demo.service.*.*(..))") public void servicePointcut() { } @Around("servicePointcut()") public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { long startTime = System.currentTimeMillis(); Object proceed = joinPoint.proceed(); System.out.println(joinPoint.getSignature().getName() + " executed in " + (System.currentTimeMillis() - startTime) + "ms"); return proceed; } } ``` 2. 在应用程序的启动类上添加 @EnableAspectJAutoProxy 注解来启用 AOP: ``` @SpringBootApplication @EnableAspectJAutoProxy public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 这样,在调用 com.example.demo.service 包下的任何方法时,LogAspect 类中定义的 logExecutionTime 方法都会被调用,记录方法的执行时间。 以上是一个简单的面向切面编程示例。在实际应用中,你可以使用 AOP 来实现很多功能,例如事务管理、安全控制等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值