-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: 요청마다 고유한 아이디(traceId)를 만들어 로그에 남겨, 추적을 용이하게 한다. #744
Conversation
및 불필요 캐스팅문 삭제
부모 클래스의 메소드도 로깅 기준에 포함토록 합니다.
실수로 바꾸어놓았었습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
좋습니다. 많은 걸 배워가네요~
|
||
import static net.logstash.logback.argument.StructuredArguments.value; | ||
|
||
@Slf4j | ||
@Component | ||
@Aspect | ||
@Order(2) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요게 뭐에요? ㅎ..ㅎ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
AOP를 적용하는 순서입니다~ 시간 측정 프록시를 먼저 적용하고, 트랜잭션 아이디를 release해주는 메소드에 또 한 번 적용하는 것입니다.
이 경우엔 컨트롤러 들만 타겟으로 걸려서 프록시가 만들어지겠군요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
근데 이부분은 삭제되었습니다. Transaction Id를 릴리즈해주는 부분 때문에 넣었던 건데, 더 간단한 방법(MDC, Interceptor활용)이 있었습니다.
} | ||
|
||
@Pointcut("execution(public * com.woowacourse.zzimkkong..*(..))") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
위에 createLogProxy 에서의 pointcut 표현식이랑 같은것 같네요! 하나의 상수로 관리할 수 있을것 같습니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오 왜 놓쳤을까요. PointCut 표현식이 적용된 메소드 참조가 안 되길래 그냥 상수로 빼버렸습니다!!
public class TransactionReleaser { | ||
private final TransactionThreadLocal transactionThreadLocal; | ||
|
||
public TransactionReleaser(TransactionThreadLocal transactionThreadLocal) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
전체적으로 파라미터 final 체크 해주세요!
public TransactionReleaser(TransactionThreadLocal transactionThreadLocal) { | |
public TransactionReleaser(final TransactionThreadLocal transactionThreadLocal) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
으아 죄송합니다! 감사합니다!
추가 질문 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오호라 좋네요~
이러다 로깅 관련 로직이 api 로직보다 길어질 것 같은데 원래 그런건가요???? 그냥 궁금해서....ㅎㅎ...
로깅관련 로직이 길어질수록 시간도 더 들 것 같은데 그거에 대한 문제는 없나요?????? 트레이드오프인건가..
요청마다 아이디 주는 건 좋습니다! 근데 지금은 요청 하나마다 트랜잭션 하나이긴 하지만 앞으로 트랜잭션이 쪼개질 수 있다는 생각이 들어서 목적이 '요청마다'인지 '트랜잭션마다'인지 생각해보면 좋을 것 같아요! 만일 요청마다라면 트랜잭션 아이디라는 이름을 수정하면 좋을 것 같아요!
d11f722
넹 완전히 괜찮습니다. |
아주 좋은 생각이에요!! WAS에서도 트랜잭션이라는 개념이 성립하기 때문에 이렇게 해보았지만, 굳이 관례에 얽매이지 않고 우리에게 맞추어 적용하는 것이 주체적인 것 같아요.
트랜잭션 아이디를 풀어주는 것(TransactionIdReleaser) 때문에 프록시를 만들지 않도록 변경해보았습니다.
MDC(내부적으로 쓰레드 로컬 사용)에 의해 traceId를 만들어오는 부분은 해쉬맵을 사용하는 것과 같은 수준이라 문제가 되지 않을 것 같습니다! 항상 로깅에 의한 오버헤드에는 주의하고 있습니다! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
넘 좋습니다~~~~! 수고 많으셨슴니다~~~~~👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ㅇㅍㄹㅂ
089a9df
✅ ZZIMKKONG SONARQUBE ✅ |
상황 설명
Before
After
transaction
칼럼(현재는traceId
)에 주목해보세요. 이제 어떤 요청에 의해 로그가 남았는지 서로 분간이 가지 않나요?4740a0cceaa4
,f58cb3a7a4c9
,6e85cd7e49bd
이렇게 3개의 요청이 있었네요!4740a0cceaa4
요청을 추적하기 위해 필터링을 걸어볼까요?구현 기능
ThreadLocal
을 사용하였습니다. 쓰레드 로컬이란?11월 13일 추가 사항
Close #743