-
Notifications
You must be signed in to change notification settings - Fork 7
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
백엔드 로그 리팩토링 #859
base: dev/be
Are you sure you want to change the base?
백엔드 로그 리팩토링 #859
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.
초롱~ 고생 많으셨어요!
수정사항 남겨두었어요!!
backend/src/main/java/codezap/global/logger/RequestResponseLogger.java
Outdated
Show resolved
Hide resolved
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.
악 펜딩상태였네요ㅠ 리뷰 하나 봐주세요
초롱 수고했어요!!!!!!!!
모든 로그의 기본 형태는 똑같습니다. (이 부분에서 색 처리에 대한 문제가 발생했는데, 색을 입힐 때 level 앞에 %cyan 이런 식으로 문자열이 들어갑니다. 근데 이게 레벨마다 문자열이 다 달라서 정규식 표현이 쉽지않음...)
%highlight을 사용하면 알아서 레벨별로 색 칠해주지 않나용...??
if (isError(status)) { | ||
log.error(requestMessage); | ||
log.error(requestMessage); | ||
} | ||
if (isWarn(status)) { | ||
log.warn(requestMessage); | ||
log.warn(responseMessage); | ||
} | ||
if (isInfo(status)) { | ||
log.info(requestMessage); | ||
log.info(responseMessage); | ||
} |
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.
사소하지만 메서드 분리해보면 어떨까요~~??
isError() 메서드에 log까지 아예 포함하도록 변경해봐도 좋을 것 같슴당
private void logError(int status) {
boolean isError = status >= ERROR_CODE;
if (isError(status)) {
log.error(requestMessage);
log.error(requestMessage);
}
}
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.
초롱 수고하셨어요 ~!
미루고 미루다 이제 봤네요 ,,, ! 체곱니다 !
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.
공통
- level, timestamp, correlationId 등 불필요한 정보는 화면에 보이지 않고 필드로만 가지고 있게 변경하였습니다.
- correlationId의 경우 로그의 순서가 뒤섞일 수도 있어서 검색을 통해 원하는 요청에 대한 로그만 확인할 수 있습니다.
- level 필터링을 통해 원하는 레벨의 로그만 확인할 수 있습니다.
WARN
ERROR
- ERROR의 경우는 아래와 같이 스택 트레이스가 같이 보이게 하였습니다.
- 로그 한 줄에 전부 포함되게 하였으며 로그를 클릭하면 아래로 펼쳐지는 형태로 변경하였습니다.
- 하지만 스택 트레이스가 너무 길어서 하나의 로그에 전부 담기지 못하고 있습니다.
- 그래도 충분한 길이의 스택 트레이스가 담기기는 해서 이걸로 웬만하면 해결 가능하지 않을까 싶어서 일단 냅뒀습니다.
++
%highlight을 사용하면 알아서 레벨별로 색 칠해주지 않나용...??
시도하려고 했는데 어차피 level, timestamp 이런거 전부 로그에 안보이게 수정해서 그냥 시도 안했습니다 ㅎㅎ
혹시 필요할 것 같다고 생각되면 얘기해주세요. 어렵진 않을듯?
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.
correlationId를 더 쉽게 사용할 수 있군요 너무 편하겠어요~~
수고하셨씁니다~~
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.
드디어 로그가 개선되는군요 멋져요 👍
간단한 코멘트 남겼으니 확인해줘요 초롱~~
private void logError(int status, String requestMessage, String responseMessage) { | ||
boolean isError = status >= ERROR_CODE; | ||
if (isError) { | ||
log.error(requestMessage); | ||
log.error(responseMessage); | ||
} | ||
} | ||
|
||
private void logWarn(int status, String requestMessage, String responseMessage) { | ||
boolean isWarn = status >= WARN_CODE && status < ERROR_CODE; | ||
if (isWarn) { | ||
log.warn(requestMessage); | ||
log.warn(responseMessage); | ||
} | ||
} | ||
|
||
private void logInfo(int status, String requestMessage, String responseMessage) { | ||
boolean isInfo = status < WARN_CODE; | ||
if (isInfo) { | ||
log.info(requestMessage); | ||
log.info(responseMessage); | ||
} | ||
} |
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.
저는 다음과 같이 작성하는 게 더 낫다고 생각해서 제안해요~
이렇게하면
- Early Return으로 호출되는 코드 수를 줄일 수 있어요.
logResponse()
메서드에서 하나의 메서드만 호출하면 돼요.RequestResponseLogger
클래스의 전체 라인 수가 줄어들어요.
private void logError(int status, String requestMessage, String responseMessage) { | |
boolean isError = status >= ERROR_CODE; | |
if (isError) { | |
log.error(requestMessage); | |
log.error(responseMessage); | |
} | |
} | |
private void logWarn(int status, String requestMessage, String responseMessage) { | |
boolean isWarn = status >= WARN_CODE && status < ERROR_CODE; | |
if (isWarn) { | |
log.warn(requestMessage); | |
log.warn(responseMessage); | |
} | |
} | |
private void logInfo(int status, String requestMessage, String responseMessage) { | |
boolean isInfo = status < WARN_CODE; | |
if (isInfo) { | |
log.info(requestMessage); | |
log.info(responseMessage); | |
} | |
} | |
private void logByStatus(int status, String requestMessage, String responseMessage) { | |
if (status >= ERROR_CODE) { | |
log.error(requestMessage); | |
log.error(responseMessage); | |
return; | |
} | |
if (status >= WARN_CODE) { | |
log.warn(requestMessage); | |
log.warn(responseMessage); | |
return; | |
} | |
log.info(requestMessage); | |
log.info(responseMessage); | |
} |
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.
와우 진짜 너무 깔끔한데요👍
private String getHeaderAsJson(ContentCachingRequestWrapper requestWrapper) { | ||
Map<String, String> headersMap = new HashMap<>(); | ||
requestWrapper.getHeaderNames().asIterator().forEachRemaining(headerName -> { | ||
String headerValue = requestWrapper.getHeader(headerName); | ||
headerAndValue.append(headerName).append(" : ").append(headerValue).append("\n"); | ||
headersMap.put(headerName, headerValue); | ||
}); | ||
|
||
return headerAndValue.toString(); | ||
return convertMapToJson(headersMap); | ||
} | ||
|
||
private String getHeaderAndValue(ContentCachingResponseWrapper requestWrapper) { | ||
return requestWrapper.getHeaderNames().stream().map(headerName -> { | ||
String headerValue = requestWrapper.getHeader(headerName); | ||
return headerName + " : " + headerValue; | ||
}).collect(Collectors.joining("\n")); | ||
private String getHeaderAsJson(ContentCachingResponseWrapper responseWrapper) { | ||
Map<String, String> headersMap = new HashMap<>(); | ||
responseWrapper.getHeaderNames().forEach(headerName -> { | ||
String headerValue = responseWrapper.getHeader(headerName); | ||
headersMap.put(headerName, headerValue); | ||
}); | ||
|
||
return convertMapToJson(headersMap); | ||
} |
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.
동일한 로직이지만, 디미터의 법칙 측면에서 개선할 수 있을 것 같아 제안해요~
private String getHeaderAsJson(ContentCachingRequestWrapper requestWrapper) {
Map<String, String> headersMap = new HashMap<>();
Enumeration<String> headerNames = requestWrapper.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
headersMap.put(headerName, requestWrapper.getHeader(headerName));
}
return convertMapToJson(headersMap);
}
private String getHeaderAsJson(ContentCachingResponseWrapper responseWrapper) {
Map<String, String> headersMap = new HashMap<>();
for (String headerName : responseWrapper.getHeaderNames()) {
headersMap.put(headerName, responseWrapper.getHeader(headerName));
}
return convertMapToJson(headersMap);
}
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.
가독성도 더 올라가는 것 같네요!!
…refactor/768-log-refactor # Conflicts: # backend/submodules/private
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.
private void logError(int status, String requestMessage, String responseMessage) { | ||
boolean isError = status >= ERROR_CODE; | ||
if (isError) { | ||
log.error(requestMessage); | ||
log.error(responseMessage); | ||
} | ||
} | ||
|
||
private void logWarn(int status, String requestMessage, String responseMessage) { | ||
boolean isWarn = status >= WARN_CODE && status < ERROR_CODE; | ||
if (isWarn) { | ||
log.warn(requestMessage); | ||
log.warn(responseMessage); | ||
} | ||
} | ||
|
||
private void logInfo(int status, String requestMessage, String responseMessage) { | ||
boolean isInfo = status < WARN_CODE; | ||
if (isInfo) { | ||
log.info(requestMessage); | ||
log.info(responseMessage); | ||
} | ||
} |
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.
와우 진짜 너무 깔끔한데요👍
private String getHeaderAsJson(ContentCachingRequestWrapper requestWrapper) { | ||
Map<String, String> headersMap = new HashMap<>(); | ||
requestWrapper.getHeaderNames().asIterator().forEachRemaining(headerName -> { | ||
String headerValue = requestWrapper.getHeader(headerName); | ||
headerAndValue.append(headerName).append(" : ").append(headerValue).append("\n"); | ||
headersMap.put(headerName, headerValue); | ||
}); | ||
|
||
return headerAndValue.toString(); | ||
return convertMapToJson(headersMap); | ||
} | ||
|
||
private String getHeaderAndValue(ContentCachingResponseWrapper requestWrapper) { | ||
return requestWrapper.getHeaderNames().stream().map(headerName -> { | ||
String headerValue = requestWrapper.getHeader(headerName); | ||
return headerName + " : " + headerValue; | ||
}).collect(Collectors.joining("\n")); | ||
private String getHeaderAsJson(ContentCachingResponseWrapper responseWrapper) { | ||
Map<String, String> headersMap = new HashMap<>(); | ||
responseWrapper.getHeaderNames().forEach(headerName -> { | ||
String headerValue = responseWrapper.getHeader(headerName); | ||
headersMap.put(headerName, headerValue); | ||
}); | ||
|
||
return convertMapToJson(headersMap); | ||
} |
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.
가독성도 더 올라가는 것 같네요!!
⚡️ 관련 이슈
close #768
📍주요 변경 사항
promtail 설정파일 변경
🎸기타
🍗 PR 첫 리뷰 마감 기한
10:24 23:59