Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Exception
- Servlet
- 스프링 핵심 기능
- JPQL
- http
- SpringBoot
- java
- JDBC
- Greedy
- Proxy
- db
- Thymeleaf
- spring
- jpa
- 그리디
- 인프런
- transaction
- 알고리즘
- Android
- 김영한
- 백준
- kotlin
- QueryDSL
- pointcut
- Spring Boot
- springdatajpa
- 스프링
- 자바
- 스프링 핵심 원리
- AOP
Archives
- Today
- Total
개발자되기 프로젝트
로그 추적기 V2 - 파라미터로 동기화 개발 본문
- 트랜잭션ID와 메서드 호출의 깊이를 표현하는 하는 가장 단순한 방법은
- 첫 로그에서 사용한 트랜잭션ID 와 level 을 다음 로그에 넘겨주면 된다.
- 현재 로그의 상태 정보인 트랜잭션ID 와 level 은 TraceId 에 포함되어 있다.
- 따라서 TraceId 를 다음 로그에 넘겨주면 된다.
1. OrderControllerV2
- 기존 begin()외에 동기화기능이 추가된 beginSync()를 추가해주자.
- 간단하게 이전의 TraceId를 받아와서 createNextId()를 호출해준다.
/**
* v2에서 추가
*/
public TraceStatus beginSync(TraceId beforeTraceId, String message){
//TraceId traceId = new TraceId();
TraceId nextId = beforeTraceId.creatNextId();
Long startTimeMs = System.currentTimeMillis();
log.info("[{}] {}{}", nextId.getId(), addSpace(START_PREFIX, nextId.getLevel()), message);
return new TraceStatus(nextId, startTimeMs, message);
}
2. Test
- TraceId가 동기화 되고, 화삺표(?)표시도 정상적으로 표시된다.
class HelloTraceV2Test {
@Test
void begin_end(){
HelloTraceV2 trace = new HelloTraceV2();
TraceStatus status1 = trace.begin("hello1");
TraceStatus status2 = trace.beginSync(status1.getTraceId(), "hello2");
trace.end(status1);
trace.end(status2);
}
@Test
void begin_exception(){
HelloTraceV2 trace = new HelloTraceV2();
TraceStatus status1 = trace.begin("hello1");
TraceStatus status2 = trace.beginSync(status1.getTraceId(), "hello2");
trace.exception(status1, new IllegalStateException());
trace.exception(status2, new IllegalStateException());
}
}
10:53:29.343 [main] INFO hello.advanced.hellotrace.HelloTraceV2 - [a0fa5956] hello1
10:53:29.358 [main] INFO hello.advanced.hellotrace.HelloTraceV2 - [a0fa5956] |-->hello2
10:53:29.361 [main] INFO hello.advanced.hellotrace.HelloTraceV2 - [a0fa5956] hello1 time=22ms ex=java.lang.IllegalStateException
10:53:29.362 [main] INFO hello.advanced.hellotrace.HelloTraceV2 - [a0fa5956] |<X-hello2 time=10ms ex=java.lang.IllegalStateException
10:53:29.383 [main] INFO hello.advanced.hellotrace.HelloTraceV2 - [6f734341] hello1
10:53:29.384 [main] INFO hello.advanced.hellotrace.HelloTraceV2 - [6f734341] |-->hello2
10:53:29.384 [main] INFO hello.advanced.hellotrace.HelloTraceV2 - [6f734341] hello1 time=1ms
10:53:29.384 [main] INFO hello.advanced.hellotrace.HelloTraceV2 - [6f734341] |<--hello2 time=0ms
3. 정리
- beginSync()메서드를 사용하면 이전의 traceId를 넘겨주고, traceId.createNextId()를 호출하게 된다.
- createNextId()는 이전의 taceId.id를 사용하며, level을 1 증가시킨다.
- 따라서 level이 1 증가했기 때문에, 화살표(?)가 표시된 것을 볼 수 있다.
4. GitHub : 211119 Log Tracer V2
'인프런 > [인프런] 스프링 핵심 원리 - 고급' 카테고리의 다른 글
필드 동기화 - 개발 (0) | 2021.11.20 |
---|---|
로그 추적기 V2 - 적용 (0) | 2021.11.20 |
로그 추적기 V1 - 적용 (0) | 2021.11.19 |
로그 추적기 v1 - 프로토 타입 (0) | 2021.11.18 |
로그 추적기 - 요구사항 분석 (0) | 2021.11.18 |
Comments