24.01.29 13:38 작성
·
238
0
gateway에 의해서 api는 정상적으로 호출이 되는데 로그가 출력되지 않습니다.
customFilter, globalFilter 모두 출력이 되지 않았습니다. 코드에 혹시 누락된 부분이 있을까요.
package com.example.springgateway.filter;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
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 GlobalFilter extends AbstractGatewayFilterFactory<GlobalFilter.Config> {
public GlobalFilter() {
super(Config.class);
}
@Override
public GatewayFilter apply(Config config) {
// Custom Pre Filter
return (exchange, chain) -> {
ServerHttpRequest request = exchange.getRequest();
ServerHttpResponse response = exchange.getResponse();
log.info("Global Filter baseMessage : {}", config.getBaesMessage());
if (config.isPreLogger()) {
log.info("Global Filter Start : request id -> {}", request.getId());
} else {
log.info("preLogger is false");
}
// Custom Post Filter
return chain.filter(exchange).then(Mono.fromRunnable(()-> {
if (config.isPostLogger()) {
log.info("Global Filter End : request id -> {}", response.getStatusCode());
} else {
log.info("postLogger is false");
}
}));
};
}
@Data
public static class Config {
//put the configuration properties
private String baesMessage;
private boolean preLogger;
private boolean postLogger;
}
}
spring:
application:
name: gateway-service
cloud:
gateway:
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:
- CustomFilter
# - AddRequestHeader=second-request, second-request-header2
# - AddResponseHeader=second-response, second-response-header2
- id: user-service
uri: http://localhost:8083/
predicates:
- Path=/user-service/**
filters:
- CustomFilter
# filters:
# - AddRequestHeader=user-request, user-request-header2
# - AddResponseHeader=user-response, user-response-header2
- id: catalog-service
uri: lb://CATALOG-SERVICE
predicates:
- Path=/catalog-service/**
- id: order-service
uri: lb://ORDER-SERVICE
predicates:
- Path=/order-service/**
default-filters:
- name: GlobalFilter
args:
baseMessage: Spring Cloud Gateway Global Filter
preLogger: true
postLogger: true
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka
server:
port: 8000
package com.example.springgateway.config;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//@Configuration
public class FilterConfig {
// @Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.path("/user-service/**")
.filters(f -> f.addRequestHeader("user-request", "user-request-header")
.addResponseHeader("user-response", "user-response-header"))
.uri("http://localhost:8083/"))
.route(r -> r.path("/second-service/**")
.filters(f -> f.addRequestHeader("second-request", "second-request-header")
.addResponseHeader("second-response", "second-response-header"))
.uri("http://localhost:8082/"))
.build();
}
}
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
코딩하는대학생님, 로그가 출력되지 않는 문제를 겪고 계신 상황이군요. 제공해주신 정보를 바탕으로 몇 가지 확인해볼 포인트를 말씀드리겠습니다.
INFO
이상으로 설정되어야 해당 로그들이 출력됩니다.log.info
메서드를 사용하고 계시니, Slf4j 및 Logback과 같은 구현체가 클래스패스에 있고 올바르게 설정되어 있는지 확인하시기 바랍니다.해당 필터 구성이 올바른지 확인하시고, 로깅 설정 및 레벨, 필터의 추가와 적용 등이 올바르게 설정되어 있는지 다시 한 번 점검해 보시기 바랍니다.
또한, 로그가 출력되지 않는 원인을 좀 더 자세히 파악하기 위해, 실제 로깅 동작을 거치는 컨테이너나 서버의 로그 설정 파일도 점검해보시는 것이 좋을 것 같습니다.
위의 조언들이 문제 해결에 도움이 되길 바랍니다. 추가적인 도움이 필요하거나, 다른 문제가 발생하면 언제든 질문해 주세요.