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
HelloTraceV1 trace: HelloTraceV1을 주입 받음, HelloTraceV1은 @component 애노테이션을 가지고 있어 컴포넌트 스캔의 대상이 됨, 따라서 자동으로 스프링 빈으로 등록
trace.begin("OrderController.request()") : 로그를 시작할 때 메시지 이름으로 컨트롤러 이름 +
메서드 이름 줌, 이렇게 하면 어떤 컨트롤러와 메서드가 호출되었는지 로그로 편리하게 확인 가능
, 수작업인 것이 단점
단순하게 trace.begin() , trace.end() 코드 두 줄만 적용하면 될 줄 알았지만, 실상은 그렇지 않음,
trace.exception() 으로 예외까지 처리해야 하므로 지저분한 try , catch 코드가 추가
begin() 의 결과 값으로 받은 TraceStatus status 값을 end() , exception() 에 넘김 결국
try , catch 블록 모두에 이 값을 넘김, 따라서 try 상위에 TraceStatus status 코드를 선언해야 함 만약 try 안에서 TraceStatus status 를 선언하면 try 블록안에서만 해당 변수가 유효하기 때문에 catch 블록에 넘길 수 없음 따라서 컴파일 오류가 발생
throw e : 예외를 꼭 다시 던져야함 그렇지 않으면 여기서 예외를 먹어버리고, 이후에 정상 흐름으로 동작 로그는 애플리케이션에 흐름에 영향을 주면 안 됨 로그 때문에 예외가 사라지면 안됨
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.
Uh oh!
There was an error while loading. Please reload this page.
로그 추적기 V1 - 적용
OrderControllerV1
메서드 이름 줌, 이렇게 하면 어떤 컨트롤러와 메서드가 호출되었는지 로그로 편리하게 확인 가능
, 수작업인 것이 단점
trace.exception() 으로 예외까지 처리해야 하므로 지저분한 try , catch 코드가 추가
try , catch 블록 모두에 이 값을 넘김, 따라서 try 상위에 TraceStatus status 코드를 선언해야 함 만약 try 안에서 TraceStatus status 를 선언하면 try 블록안에서만 해당 변수가 유효하기 때문에 catch 블록에 넘길 수 없음 따라서 컴파일 오류가 발생
OrderServiceV1
OrderRepositoryV1
정상 실행 로그
-- level 관련 기능 개발하지 않음, 따라서 level 항상 0 트랜잭션 ID 값도 다름, 개발 안 함
예외 실행 로그
남은 문제
요구사항
모든 PUBLIC 메서드의 호출과 응답 정보를 로그로 출력애플리케이션의 흐름을 변경하면 안됨로그를 남긴다고 해서 비즈니스 로직의 동작에 영향을 주면 안됨메서드 호출에 걸린 시간정상 흐름과 예외 흐름 구분예외 발생시 예외 정보가 남아야 함메서드 호출의 깊이 표현
HTTP 요청을 구분
HTTP 요청 단위로 특정 ID를 남겨서 어떤 HTTP 요청에서 시작된 것인지 명확하게 구분이 가능해야 함
트랜잭션 ID (DB 트랜잭션X)
아직 구현하지 못한 요구사항은 메서드 호출의 깊이를 표현하고, 같은 HTTP 요청이면 같은 트랜잭션 ID를 남기는 것
이 기능은 직전 로그의 깊이와 트랜잭션 ID가 무엇인지 알아야 할 수 있는 일
필드 동기화 - 개발
LogTrace 인터페이스
syncTraceId()
releaseTraceId()
FieldLogTraceTest
begin_end_level2() - 실행 결과
begin_exception_level2() - 실행 결과
All reactions