diff --git a/spring-core/advanced/src/main/java/com/example/advanced/LogTraceConfig.java b/spring-core/advanced/src/main/java/com/example/advanced/LogTraceConfig.java new file mode 100644 index 00000000..cc6e624b --- /dev/null +++ b/spring-core/advanced/src/main/java/com/example/advanced/LogTraceConfig.java @@ -0,0 +1,15 @@ +package com.example.advanced; + +import com.example.advanced.trace.logtrace.FieldLogTrace; +import com.example.advanced.trace.logtrace.LogTrace; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class LogTraceConfig { + + @Bean + public LogTrace logTrace() { + return new FieldLogTrace(); + } +} diff --git a/spring-core/advanced/src/main/java/com/example/advanced/app/v3/OrderControllerV3.java b/spring-core/advanced/src/main/java/com/example/advanced/app/v3/OrderControllerV3.java new file mode 100644 index 00000000..146d5721 --- /dev/null +++ b/spring-core/advanced/src/main/java/com/example/advanced/app/v3/OrderControllerV3.java @@ -0,0 +1,30 @@ +package com.example.advanced.app.v3; + +import com.example.advanced.trace.TraceStatus; +import com.example.advanced.trace.logtrace.LogTrace; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class OrderControllerV3 { + + private final OrderServiceV3 orderService; + private final LogTrace trace; + + @GetMapping("/v3/request") + public String request(String itemId) { + + TraceStatus status = null; + try { + status = trace.begin("OrderController.request()"); + orderService.orderItem(itemId); + trace.end(status); + return "ok"; + } catch (Exception e) { + trace.exception(status, e); + throw e; + } + } +} diff --git a/spring-core/advanced/src/main/java/com/example/advanced/app/v3/OrderRepositoryV3.java b/spring-core/advanced/src/main/java/com/example/advanced/app/v3/OrderRepositoryV3.java new file mode 100644 index 00000000..536aa2be --- /dev/null +++ b/spring-core/advanced/src/main/java/com/example/advanced/app/v3/OrderRepositoryV3.java @@ -0,0 +1,38 @@ +package com.example.advanced.app.v3; + +import com.example.advanced.trace.TraceStatus; +import com.example.advanced.trace.logtrace.LogTrace; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class OrderRepositoryV3 { + + private final LogTrace trace; + + public void save(String itemId) { + + TraceStatus status = null; + try { + status = trace.begin("OrderRepository.save()"); + // 저장 로직 + if (itemId.equals("ex")) { + throw new IllegalStateException("예외 발생!"); + } + sleep(1000); + trace.end(status); + } catch (Exception e) { + trace.exception(status, e); + throw e; + } + } + + private void sleep(int millis) { + try { + Thread.sleep(millis); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/spring-core/advanced/src/main/java/com/example/advanced/app/v3/OrderServiceV3.java b/spring-core/advanced/src/main/java/com/example/advanced/app/v3/OrderServiceV3.java new file mode 100644 index 00000000..132cf107 --- /dev/null +++ b/spring-core/advanced/src/main/java/com/example/advanced/app/v3/OrderServiceV3.java @@ -0,0 +1,26 @@ +package com.example.advanced.app.v3; + +import com.example.advanced.trace.TraceStatus; +import com.example.advanced.trace.logtrace.LogTrace; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class OrderServiceV3 { + + private final OrderRepositoryV3 orderRepository; + private final LogTrace trace; + + public void orderItem(String itemId) { + TraceStatus status = null; + try { + status = trace.begin("OrderService.orderItem()"); + orderRepository.save(itemId); + trace.end(status); + } catch (Exception e) { + trace.exception(status, e); + throw e; + } + } +} diff --git a/spring-core/advanced/src/main/java/com/example/advanced/trace/logtrace/FieldLogTrace.java b/spring-core/advanced/src/main/java/com/example/advanced/trace/logtrace/FieldLogTrace.java new file mode 100644 index 00000000..96e40e0b --- /dev/null +++ b/spring-core/advanced/src/main/java/com/example/advanced/trace/logtrace/FieldLogTrace.java @@ -0,0 +1,71 @@ +package com.example.advanced.trace.logtrace; + +import com.example.advanced.trace.TraceId; +import com.example.advanced.trace.TraceStatus; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class FieldLogTrace implements LogTrace { + + private static final String START_PREFIX = "-->"; + private static final String COMPLETE_PREFIX = "<--"; + private static final String EX_PREFIX = "