You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
필드 동기화 - 개발
앞서 로그 추적기를 만들면서 다음 로그를 출력할때 트랜잭션 ID와 level을 동기화하는 문제가 있었다.
traceId를 파라미터로 넘기지 않고 이 문제를 해결하는 방법은 없을까?코드작성
interface :
LogTraceFieldLogTraceFieldLogTrace는 기존에 만들었던HelloTraceV2와 거의 같은 기능을 한다.TraceId를 동기화하는 부분만 파라미터를 사용하는 것에서TraceId traceIdHolder필드를 사용하도록 변경되었다.TraceId는 파라미터로 전달되는 것이 아니라FieldLogTrace의 필드인traceIdHolder에 저장된다.여기서 중요한 부분은 로그를 시작할때 호출하는
syncTraceId()와 로그를 종료할때 호출하는releaseTraceId()이다.syncTraceId()TraceId를 새로 만들거나 앞선 로그의TraceId를 참고해서 동기화하고level도 증가한다.TraceId를 새로 만든다.TraceId를 참고해서 동기화하고level도 하나 증가한다.traceHolder에 보관한다.releaseTraceId()level이 하나 증기해야하지만, 메서드 호출이 끝나면level1이 하나 감소해야 한다.releaseTraceId()는level을 하나 감소한다.traceId를 제거한다.결과
정상 테스트 코드
FieldLogTraceTest정상 테스트 실행
예외 테스트 코드
예외테스트 실행
level1을 통한 깊이도 잘 표현된다.FieldLogTrace.traceIdHolder필드를 사용해서TraceId가 잘 동기화 되는 것을 확인할 수 있다.traceId를 파라미터로 전달하지 않아도 되고 애플리케이션의 메서드 파라미터도 변경하지 않아도 된다.All reactions