Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/deploy-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,11 @@ jobs:
java-version: '21'
distribution: 'corretto'

- name: Gradle Wrapper 실행 권한 부여
run: chmod +x ./gradlew

- name: JAR 빌드
run: ./gradlew bootJar --no-daemon
run: ./gradlew bootJar --no-daemon --stacktrace -Dspring.profiles.active=prod

- name: Docker Hub 로그인
run: echo "${{ secrets.DOCKER_ACCESS_TOKEN }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
Expand All @@ -20,11 +19,7 @@ public class ControllerLoggingAspect {

private static final int MAX_LOG_LENGTH = 500;

@Pointcut("execution(* com.recyclestudy..controller..*(..))")
public void controllerMethods() {
}

@Around("controllerMethods()")
@Around("LoggingPointcuts.controllerLayer()")
public Object logController(final ProceedingJoinPoint joinPoint) throws Throwable {
final MethodSignature signature = (MethodSignature) joinPoint.getSignature();
final String className = signature.getDeclaringType().getSimpleName();
Expand Down
22 changes: 22 additions & 0 deletions src/main/java/com/recyclestudy/common/log/LoggingPointcuts.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.recyclestudy.common.log;

import org.aspectj.lang.annotation.Pointcut;

public class LoggingPointcuts {

@Pointcut("execution(* com.recyclestudy..controller..*(..))")
public void controllerLayer() {
}

@Pointcut("execution(* com.recyclestudy..service..*(..))")
public void serviceLayer() {
}

@Pointcut("execution(* com.recyclestudy..repository..*(..))")
public void repositoryLayer() {
}

@Pointcut("controllerLayer() || serviceLayer() || repositoryLayer()")
public void applicationLayers() {
}
}
36 changes: 36 additions & 0 deletions src/main/java/com/recyclestudy/common/trace/TracingAspect.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.recyclestudy.common.trace;

import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.context.Scope;
import lombok.RequiredArgsConstructor;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Aspect
@Component
@RequiredArgsConstructor
@Order(Ordered.HIGHEST_PRECEDENCE)
public class TracingAspect {

private final Tracer tracer;

@Around("com.recyclestudy.common.log.LoggingPointcuts.applicationLayers()")
public Object trace(ProceedingJoinPoint joinPoint) throws Throwable {
String className = joinPoint.getSignature().getDeclaringType().getSimpleName();
String methodName = joinPoint.getSignature().getName();

String spanName = className + "::" + methodName;
Span span = tracer.spanBuilder(spanName).startSpan();

try (Scope scope = span.makeCurrent()) {
return joinPoint.proceed();
} finally {
span.end();
}
}
}