728x90
반응형
Spring boot에서 netty를 사용할 경우 access log가 남지 않는다.
톰캣을 사용하는 경우 access log를 남길 수 있지만 netty는 설정을 해줘야 access log를 남길 수 있다.
자바 프로퍼티 설정에 추가
-Dreactor.netty.http.server.accessLogEnabled=true |
주의할 점은 Spring property가 아니라 Java System Property에 추가를 해야 한다.
Logback 설정
<appender name="accessLog" class="ch.qos.logback.core.FileAppender">
<file>access_log.log</file>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<appender name="async" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="accessLog" />
</appender>
<logger name="reactor.netty.http.server.AccessLog" level="INFO" additivity="false">
<appender-ref ref="async"/>
</logger>
AccessLog 클래스에서 accesslog를 남기기 때문에 해당클래스를 loback설정을 통해 출력해주면 된다.
netty AccessLog Customizing
accesslog를 보기 편하게 커스터마이징할 수 있다.
해당 부분은 WebServerFactoryCustomizer를 구현하면 된다.
@Component
public class NettyWebServerCustomizer implements WebServerFactoryCustomizer<NettyReactiveWebServerFactory> {
private static final String LOG_FORMAT = "{} - {} [{}] \"{} {} {}\" {} {} {} {}";
private static final String REFERER = "Referer";
private static final String MISSING = "-";
@Override
public void customize(NettyReactiveWebServerFactory factory) {
factory.addServerCustomizers(httpServer ->
httpServer.accessLog(true,
x -> AccessLog.create(LOG_FORMAT,
applyAddress(x.remoteAddress()),
x.user(),
x.accessDateTime(),
x.method(),
x.uri(),
x.protocol(),
x.status(),
x.contentLength() > -1 ? x.contentLength() : MISSING,
x.duration(),
x.requestHeader(REFERER) != null ? x.requestHeader(REFERER) : MISSING))
);
}
private static String applyAddress(@Nullable SocketAddress socketAddress) {
return socketAddress instanceof InetSocketAddress ? ((InetSocketAddress) socketAddress).getHostString() :
MISSING;
}
}
이렇게 설정하면 아래와 같이 로그가 남는다.
728x90
반응형
'Spring' 카테고리의 다른 글
Spring cloud gateway netty httpclient pool 로그 모니터링 (2) | 2024.07.18 |
---|---|
Spring Actuator 란 무엇일까 (0) | 2023.10.29 |
스프링부트 구동할 때 초기화 코드 넣는 방법(CommandLineRunner, ApplicationRunner) (0) | 2023.10.29 |
Spring WebFlux 란 무엇일까 (0) | 2023.08.10 |
Spring @RequestMapping multi request 요청받기 (0) | 2023.02.22 |