From 4d46f058c314a3c67d1db584dd0a3755b5e0c101 Mon Sep 17 00:00:00 2001 From: 0samsung0 <78357262+0samsung0@users.noreply.github.com> Date: Mon, 19 May 2025 17:35:02 +0300 Subject: [PATCH 1/3] add LoggingAspect --- pom.xml | 6 ++++- .../samples/petclinic/LoggingAspect.java | 27 +++++++++++++++++++ .../samples/petclinic/owner/Visit.java | 9 +++---- 3 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 src/main/java/org/springframework/samples/petclinic/LoggingAspect.java diff --git a/pom.xml b/pom.xml index 27fb9a6bd..b9c62ccf7 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ - 17 + 21 UTF-8 UTF-8 io.projectreactor diff --git a/src/main/java/org/springframework/samples/petclinic/LoggingAspect.java b/src/main/java/org/springframework/samples/petclinic/LoggingAspect.java new file mode 100644 index 000000000..651a5421d --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/LoggingAspect.java @@ -0,0 +1,27 @@ +package org.springframework.samples.petclinic; + + +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.stereotype.Component; + +@Aspect +@Component +public class LoggingAspect { + + //Pointcut: all methods in package "model" + @Before("execution(* model.BaseEntity.getId())") + public void logBeforeMethod(){ + System.out.println("model.BaseEntity.getId..."); + } + + @Before("execution(* model.NamedEntity.getName())") + public void logBeforeMethod2(){ + System.out.println("model.NamedEntity.getName..."); + } + + @Before("execution(* model.Person.*())") + public void logBeforeMethod3(){ + System.out.println("model.Person"); + } +} diff --git a/src/main/java/org/springframework/samples/petclinic/owner/Visit.java b/src/main/java/org/springframework/samples/petclinic/owner/Visit.java index 35569bdaa..3e0873748 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/Visit.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/Visit.java @@ -15,15 +15,14 @@ */ package org.springframework.samples.petclinic.owner; -import java.time.LocalDate; - -import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.samples.petclinic.model.BaseEntity; - import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Table; import jakarta.validation.constraints.NotBlank; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.samples.petclinic.model.BaseEntity; + +import java.time.LocalDate; /** * Simple JavaBean domain object representing a visit. From 8393b074fc55d7c53bfe456caf3ff1affd88a926 Mon Sep 17 00:00:00 2001 From: 0samsung0 <78357262+0samsung0@users.noreply.github.com> Date: Mon, 19 May 2025 17:47:39 +0300 Subject: [PATCH 2/3] add LoggingAspect --- .../org/springframework/samples/petclinic/LoggingAspect.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/samples/petclinic/LoggingAspect.java b/src/main/java/org/springframework/samples/petclinic/LoggingAspect.java index 651a5421d..ba088a772 100644 --- a/src/main/java/org/springframework/samples/petclinic/LoggingAspect.java +++ b/src/main/java/org/springframework/samples/petclinic/LoggingAspect.java @@ -22,6 +22,6 @@ public class LoggingAspect { @Before("execution(* model.Person.*())") public void logBeforeMethod3(){ - System.out.println("model.Person"); + System.out.println("model.Person*"); } } From 0a43a7a311ee16183516abdcb68162a5667d8e69 Mon Sep 17 00:00:00 2001 From: 0samsung0 <78357262+0samsung0@users.noreply.github.com> Date: Tue, 20 May 2025 18:40:35 +0300 Subject: [PATCH 3/3] add AOP for logging --- .../samples/petclinic/LoggingAspect.java | 41 +++++++++++-------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/springframework/samples/petclinic/LoggingAspect.java b/src/main/java/org/springframework/samples/petclinic/LoggingAspect.java index ba088a772..95fcbbdc4 100644 --- a/src/main/java/org/springframework/samples/petclinic/LoggingAspect.java +++ b/src/main/java/org/springframework/samples/petclinic/LoggingAspect.java @@ -1,27 +1,34 @@ package org.springframework.samples.petclinic; - +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Before; +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); - //Pointcut: all methods in package "model" - @Before("execution(* model.BaseEntity.getId())") - public void logBeforeMethod(){ - System.out.println("model.BaseEntity.getId..."); - } - - @Before("execution(* model.NamedEntity.getName())") - public void logBeforeMethod2(){ - System.out.println("model.NamedEntity.getName..."); - } - - @Before("execution(* model.Person.*())") - public void logBeforeMethod3(){ - System.out.println("model.Person*"); - } + @Around("execution(* org.springframework.samples.petclinic..*.*(..))") + public Object logMethodExecution(ProceedingJoinPoint joinPoint) throws Throwable { + String methodName = joinPoint.getSignature().getName(); + String className = joinPoint.getTarget().getClass().getSimpleName(); + + logger.info("Начало выполнения метода: {}.{}", className, methodName); + + long startTime = System.currentTimeMillis(); + Object result = null; + try { + result = joinPoint.proceed(); + return result; + } finally { + long endTime = System.currentTimeMillis(); + logger.info("Завершение выполнения метода: {}.{} (время выполнения: {} мс)", + className, methodName, (endTime - startTime)); + } + } }