inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Filter의 로그가 출력되지 않습니다.

383

코딩하는대학생

작성한 질문수 3

0

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 실행 결과

spring-boot jpa 아키텍처 spring-cloud kafka msa rabbitmq

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

코딩하는대학생님, 로그가 출력되지 않는 문제를 겪고 계신 상황이군요. 제공해주신 정보를 바탕으로 몇 가지 확인해볼 포인트를 말씀드리겠습니다.

  1. 로깅 레벨 확인: application.yml 파일에서 로깅 레벨이 어떻게 설정되어 있는지 확인해야 합니다. 예를 들어, 로깅 레벨이 INFO 이상으로 설정되어야 해당 로그들이 출력됩니다.
  2. Slf4j 설정 확인: 로그를 사용하기 위해서는 Slf4j와 같은 로깅 프레임워크가 올바르게 설정되어 있어야 합니다. log.info 메서드를 사용하고 계시니, Slf4j 및 Logback과 같은 구현체가 클래스패스에 있고 올바르게 설정되어 있는지 확인하시기 바랍니다.
  3. 필터 동작 확인: CustomFilter 또는 GlobalFilter가 올바르게 작성되었음에도 불구하고, 또 다른 필터에 의해 요청 처리가 중단되거나 변경되는 경우가 있을 수 있으니, 이 부분을 검토해 보세요.
  4. 스프링 부트 기본 로그 출력 형식: 스프링 부트의 기본 로그 출력 형식을 참고하여 조건에 맞는 로그가 출력되는지 확인합니다. 스프링 부트의 기본 로그에는 날짜와 시간, 로그 레벨, 프로세스 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