Filter의 로그가 출력되지 않습니다.
383
작성한 질문수 3
gateway에 의해서 api는 정상적으로 호출이 되는데 로그가 출력되지 않습니다.
customFilter, globalFilter 모두 출력이 되지 않았습니다. 코드에 혹시 누락된 부분이 있을까요.
Global Filter
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;
}
}
application.yml
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
Filter Config
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();
}
}
Postman 실행 결과

답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
코딩하는대학생님, 로그가 출력되지 않는 문제를 겪고 계신 상황이군요. 제공해주신 정보를 바탕으로 몇 가지 확인해볼 포인트를 말씀드리겠습니다.
- 로깅 레벨 확인: application.yml 파일에서 로깅 레벨이 어떻게 설정되어 있는지 확인해야 합니다. 예를 들어, 로깅 레벨이
INFO이상으로 설정되어야 해당 로그들이 출력됩니다.
- Slf4j 설정 확인: 로그를 사용하기 위해서는 Slf4j와 같은 로깅 프레임워크가 올바르게 설정되어 있어야 합니다.
log.info메서드를 사용하고 계시니, Slf4j 및 Logback과 같은 구현체가 클래스패스에 있고 올바르게 설정되어 있는지 확인하시기 바랍니다.
- 필터 동작 확인: CustomFilter 또는 GlobalFilter가 올바르게 작성되었음에도 불구하고, 또 다른 필터에 의해 요청 처리가 중단되거나 변경되는 경우가 있을 수 있으니, 이 부분을 검토해 보세요.
- 스프링 부트 기본 로그 출력 형식: 스프링 부트의 기본 로그 출력 형식을 참고하여 조건에 맞는 로그가 출력되는지 확인합니다. 스프링 부트의 기본 로그에는 날짜와 시간, 로그 레벨, 프로세스 ID, 구분자, 스레드 이름, 로거 이름(소스 클래스 이름), 로그 메시지가 포함됩니다. 이는 Spring Boot Reference Documentation v3.1.5에서도 확인할 수 있습니다.
해당 필터 구성이 올바른지 확인하시고, 로깅 설정 및 레벨, 필터의 추가와 적용 등이 올바르게 설정되어 있는지 다시 한 번 점검해 보시기 바랍니다.
또한, 로그가 출력되지 않는 원인을 좀 더 자세히 파악하기 위해, 실제 로깅 동작을 거치는 컨테이너나 서버의 로그 설정 파일도 점검해보시는 것이 좋을 것 같습니다.
위의 조언들이 문제 해결에 도움이 되길 바랍니다. 추가적인 도움이 필요하거나, 다른 문제가 발생하면 언제든 질문해 주세요.
kafka 업데이트 강의 듣고 시포요
0
85
1
강의 교안
0
73
1
마이크로서비스간 통신 시, 인증 처리
0
79
1
api gateway 에서 인증 처리
0
65
1
섹션 19 질문드립니다
0
53
1
강의 자료 업데이트
0
82
1
부하분산 강의 섹션
0
57
1
강의자료는 어디에서?
0
71
1
강의 자료는 어디서 다운 받을 수 있나요?
0
110
1
전체 사용자 조회시 오류
0
58
1
혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??
0
110
2
학습 방향
0
95
2
카프카 커넥터 사용 목적 문의
0
85
2
kafka 강의
0
108
2
서비스 디스커버리 종류
0
87
2
강의 자료에 대해서 궁금해요
0
116
2
GlobalFilter, LoggingFilter가 동작하지 않습니다.
0
90
2
Kafka Source Connect 버전 에러
0
85
2
소스커넥터는 사용안한 거 맞죠?
0
81
2
강의자료 업데이트 문의
0
95
2
강의에서 BCryptPasswordEncoder 에 역할(5-2)
0
56
1
강의 업데이트 계획이 궁금합니다.
0
112
2
MSA 애플리케이션에 Spring Web과 Spring Data JPA를 사용하는 것이 바람직한지 궁금합니다. (MSA 설계와 관련된 질문입니다)
0
161
2
어떤 것이 업데이트 된 건가요?
0
164
2





