Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

로그 추적기 V2 - 파라미터로 동기화 개발 본문

인프런/[인프런] 스프링 핵심 원리 - 고급

로그 추적기 V2 - 파라미터로 동기화 개발

Seung__ 2021. 11. 20. 10:58
  • 트랜잭션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


 

GitHub - bsh6463/Spring_Advanced: initial

initial. Contribute to bsh6463/Spring_Advanced development by creating an account on GitHub.

github.com

 

Comments