Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/main/java/umc/th/juinjang/config/ApiFilterConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import umc.th.juinjang.controller.monitoring.APILoggerFilter;
import umc.th.juinjang.monitoring.ApiLoggerFilter;

@Configuration
@Slf4j
Expand All @@ -17,9 +17,9 @@ public class ApiFilterConfig {
private List<String> excludedUrls;

@Bean
public FilterRegistrationBean<APILoggerFilter> loggingFilter() {
FilterRegistrationBean<APILoggerFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new APILoggerFilter(excludedUrls));
public FilterRegistrationBean<ApiLoggerFilter> loggingFilter() {
FilterRegistrationBean<ApiLoggerFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new ApiLoggerFilter(excludedUrls));
registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE); // 순서 설정
registrationBean.setUrlPatterns(List.of("/*"));
return registrationBean;
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package umc.th.juinjang.controller.monitoring;
package umc.th.juinjang.monitoring;

import static umc.th.juinjang.utils.LoggerProvider.getLogger;

import org.slf4j.Logger;
import org.slf4j.MDC;

public abstract class APILoggerGenerator {
public abstract class ApiLogGenerator {

protected static final Logger logger = getLogger(APILoggerGenerator.class);
protected static final Logger logger = getLogger(ApiLogGenerator.class);

public APILoggerGenerator() {
public ApiLogGenerator() {
}

protected StringBuilder getBaseLogInfo() {
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/umc/th/juinjang/monitoring/ApiLogPrinter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package umc.th.juinjang.monitoring;

import static umc.th.juinjang.utils.LoggerProvider.getLogger;

import org.slf4j.Logger;
import org.springframework.stereotype.Component;

@Component
public class ApiLogPrinter {
private static final Logger logger = getLogger(ApiLogPrinter.class);

public ApiLogPrinter() {
}

public void print(ApiLogGenerator apiLogGenerator) {
logger.info(apiLogGenerator.generateLog());
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
package umc.th.juinjang.controller.monitoring;
package umc.th.juinjang.monitoring;

import jakarta.servlet.http.HttpServletRequest;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.stream.Collectors;
import org.springframework.web.util.ContentCachingRequestWrapper;

public class APIRequestLoggerGenerator extends APILoggerGenerator{
public class ApiLogRequestLogGenerator extends ApiLogGenerator {

private final CustomContentCachingHttpRequestWrapper request;
private final ContentCachingRequestWrapper request;

public APIRequestLoggerGenerator(CustomContentCachingHttpRequestWrapper request) {
public ApiLogRequestLogGenerator(ContentCachingRequestWrapper request) {
this.request = request;
}

Expand All @@ -22,7 +23,7 @@ public String generateLog() {
logBuilder.append("[method] ").append(request.getMethod()).append(" ");
logBuilder.append("[uri] ").append(getQuery()).append(" ");
logBuilder.append("[headers] ").append(getHeadersAsString(request)).append(" ");
logBuilder.append("[requestBody] ").append(getBody(request.getCachedBody())).append(" ");
logBuilder.append("[requestBody] ").append(getBody(request.getContentAsByteArray())).append(" ");

return logBuilder.toString();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package umc.th.juinjang.controller.monitoring;
package umc.th.juinjang.monitoring;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.nio.charset.StandardCharsets;
import org.springframework.web.util.ContentCachingResponseWrapper;

public class APIResponseLoggerGenerator extends APILoggerGenerator {
public class ApiLogResponseGenerator extends ApiLogGenerator {
private final ContentCachingResponseWrapper response;

public APIResponseLoggerGenerator(ContentCachingResponseWrapper response) {
public ApiLogResponseGenerator(ContentCachingResponseWrapper response) {
this.response = response;
}

Expand Down
19 changes: 19 additions & 0 deletions src/main/java/umc/th/juinjang/monitoring/ApiLoggerFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package umc.th.juinjang.monitoring;

import org.springframework.web.util.ContentCachingRequestWrapper;
import org.springframework.web.util.ContentCachingResponseWrapper;

public class ApiLoggerFactory {

public void createRequestLogger(ContentCachingRequestWrapper request) {
getApiLogPrinter().print(new ApiLogRequestLogGenerator(request));
}

public void createResponseLogger(ContentCachingResponseWrapper response) {
getApiLogPrinter().print(new ApiLogResponseGenerator(response));
}

private ApiLogPrinter getApiLogPrinter() {
return new ApiLogPrinter();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package umc.th.juinjang.controller.monitoring;
package umc.th.juinjang.monitoring;

import static umc.th.juinjang.utils.LoggerProvider.getLogger;
import static umc.th.juinjang.utils.LoggerProvider.registerRequestId;
Expand All @@ -13,35 +13,35 @@
import org.slf4j.MDC;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.util.ContentCachingRequestWrapper;
import org.springframework.web.util.ContentCachingResponseWrapper;

@Slf4j
public class APILoggerFilter extends OncePerRequestFilter {

private final APILoggerPrinter apiLoggerPrinter = new APILoggerPrinter();
private static final Logger logger = getLogger(APILoggerFilter.class);
private final AntPathMatcher pathMatcher = new AntPathMatcher();
public class ApiLoggerFilter extends OncePerRequestFilter {
private static final Logger logger = getLogger(ApiLoggerFilter.class);
private final ApiLoggerFactory apiLoggerFactory;
private final List<String> EXCLUDED_URLS;

public APILoggerFilter(List<String> EXCLUDED_URLS) {
public ApiLoggerFilter(List<String> EXCLUDED_URLS) {
this.EXCLUDED_URLS = EXCLUDED_URLS;
this.apiLoggerFactory = new ApiLoggerFactory();
}

@Override
protected void doFilterInternal(HttpServletRequest servletRequest, HttpServletResponse servletResponse, FilterChain chain ) {
CustomContentCachingHttpRequestWrapper requestWrapper = new CustomContentCachingHttpRequestWrapper(servletRequest);
ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(servletResponse);
protected void doFilterInternal(HttpServletRequest servletRequest, HttpServletResponse servletResponse, FilterChain chain) {
ContentCachingRequestWrapper request = new ContentCachingRequestWrapper(servletRequest);
ContentCachingResponseWrapper response = new ContentCachingResponseWrapper(servletResponse);
registerRequestId(UUID.randomUUID().toString());

try {
if (shouldNotFilter(requestWrapper)) {
chain.doFilter(requestWrapper, responseWrapper);
if (shouldNotFilter(request)) {
chain.doFilter(request, response);
return;
}
apiLoggerPrinter.print(new APIRequestLoggerGenerator(requestWrapper));
chain.doFilter(requestWrapper, responseWrapper);
apiLoggerPrinter.print(new APIResponseLoggerGenerator(responseWrapper));
responseWrapper.copyBodyToResponse();
chain.doFilter(request, response);
apiLoggerFactory.createRequestLogger(request);
apiLoggerFactory.createResponseLogger(response);
response.copyBodyToResponse();
} catch (Exception e) {
logger.error("APILogger 필터 오류");
} finally {
Expand All @@ -51,6 +51,7 @@ protected void doFilterInternal(HttpServletRequest servletRequest, HttpServletRe

@Override
protected boolean shouldNotFilter(HttpServletRequest request) {
AntPathMatcher pathMatcher = new AntPathMatcher();
return EXCLUDED_URLS.stream().anyMatch(pattern -> pathMatcher.match(pattern, request.getRequestURI()));
}
}
2 changes: 1 addition & 1 deletion src/main/java/umc/th/juinjang/utils/LoggerProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Value;

public class LoggerProvider { // 커스텀 로거 생성 메서드
public class LoggerProvider {

private static final String REQUEST_ID = "request_id";
private static final String USER_ID = "user_id";
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/logback-dev.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<appender-ref ref="CONSOLE_ERROR_FILE"/>
</root>

<logger name="umc.th.juinjang.controller.monitoring.APILoggerPrinter" level="INFO" additivity="false">
<logger name="umc.th.juinjang.monitoring.ApiLogPrinter" level="INFO" additivity="false">
<appender-ref ref="API_FILE"/>
<appender-ref ref="API_CONSOLE"/>
</logger>
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/logback-local.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<appender-ref ref="CONSOLE_ERROR_FILE"/>
</root>

<logger name="umc.th.juinjang.controller.monitoring.APILoggerPrinter" level="INFO" additivity="false">
<logger name="umc.th.juinjang.monitoring.ApiLogPrinter" level="INFO" additivity="false">
<appender-ref ref="API_FILE"/>
<appender-ref ref="API_CONSOLE"/>
</logger>
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/logback-prod.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<appender-ref ref="CONSOLE_ERROR_FILE"/>
</root>

<logger name="umc.th.juinjang.controller.monitoring.APILoggerPrinter" level="INFO" additivity="false">
<logger name="umc.th.juinjang.monitoring.ApiLogPrinter" level="INFO" additivity="false">
<appender-ref ref="API_FILE"/>
<appender-ref ref="API_CONSOLE"/>
</logger>
Expand Down