Spring Cloud Gateway - Logging Filter
- 📚 Spring/Spring Cloud
- 2021. 9. 29. 00:50
| Logging Filter
참고: https://mangchhe.github.io/springcloud/2021/04/18/SpringCloudGateway/
[Spring Cloud] Gateway로 Filter, LoadBalancer 구현
Spring Cloud Gateway를 구현하는 방법부터 여러 종류의 필터들과 로드밸런싱 적용에 대해서 알아보자
mangchhe.github.io
LoggingFilter.java
package com.kyhslam.apigatewayservice.filter;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.OrderedGatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
@Component
@Slf4j
public class LoggingFilter extends AbstractGatewayFilterFactory<LoggingFilter.Config> {
public LoggingFilter() {
super(Config.class);
}
@Override
public GatewayFilter apply(Config config) {
GatewayFilter filter = new OrderedGatewayFilter((exchange,chain) -> {
ServerHttpRequest request = exchange.getRequest();
ServerHttpResponse response = exchange.getResponse();
log.info("Logging Filter baseMessage: {} ", config.getBaseMessage());
if(config.isPreLogger()) {
log.info("Logging PRE Filter Start: request id -> {}", request.getId());
}
//Custom Post Filter
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
if(config.isPostLogger()) {
log.info("Logging POST Filter End: response code -> {} ", response.getStatusCode());
}
}));
}, Ordered.LOWEST_PRECEDENCE); // 우선순위 지정할 수 있다
//HIGHEST_PRECEDENCE
return filter;
}
@Data
public static class Config {
private String baseMessage;
private boolean preLogger;
private boolean postLogger;
}
}
application.yml
server:
port: 8000
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: apigateway-service
cloud:
gateway:
default-filters:
- name: GlobalFilter
args:
baseMessage: Spring Cloud Gateway Global Filter
preLogger: true
postLogger: true
routes:
- id: first-service
uri: http://localhost:8081/
predicates:
- Path=/first-service/**
filters:
- CustomFilter
- id: second-service
uri: http://localhost:8082/
predicates:
- Path=/second-service/**
filters:
- name: CustomFilter
- name: LoggingFilter
args:
baseMessage: Hi, there.
preLogger: true
postLogger: true
second service에만 LoggingFilter를 적용하였다
테스트 결과
'📚 Spring > Spring Cloud' 카테고리의 다른 글
SpringCloud의 이해 (0) | 2022.01.28 |
---|---|
Spring Cloud Gateway - Load Balancer (0) | 2021.09.29 |
Spring Cloud Gateway - Global Filter (0) | 2021.09.27 |
Spring Cloud Gateway - Custom Filter (0) | 2021.09.27 |
Spring Cloud Gateway - Filter (0) | 2021.09.24 |