Slide 57
Slide 57 text
ログ
●
AbstractRequestLoggingFilterを参考にContentCachingRequestWrapper、
ContentCachingResponseWrapperを使用するように実装しました
57
@AllArgsConstructor
public class RequestAndResponseLoggingFilter extends
OncePerRequestFilter {
@Override
protected void doFilterInternal
(@NonNull HttpServletRequest
request, @NonNull HttpServletResponse response, @NonNull
FilterChain filterChain) {
doFilterWrapped(wrapRequest(request), wrapResponse(response),
filterChain);
}
private void doFilterWrapped
(ContentCachingResponseWrapper
request, ContentCachingResponseWrapper response) {
try {
// リクエストログ出力
(予め指定してキーに絞ってログ出力)
writeRequestLog(request);
// 処理の実行
long start = System.currentTimeMillis();
filterChain.doFilter(request, response);
long latency = System.currentTimeMillis() - start;
// レスポンスログ出力
(予め指定してキーに絞ってログ出力)
writeResponseLog(response
, latency);
} finally {
response.copyBodyToResponse(); //
レスポンスに書き込み
}
}
private ContentCachingResponseWrapper wrapRequest(HttpServletRequest request) {
return new ContentCachingResponseWrapper
(request);
}
private ContentCachingResponseWrapper wrapResponse(HttpServletResponse response) {
if (response instanceof ContentCachingResponseWrapper wrapper) {
return wrapper;
} else {
return new ContentCachingResponseWrapper(response);
}
}
}
※メモリ使用量は増えると思いますので、ご注意を。