You need to configure logging in application.properties as below:

logging.level.<package path>.MyClient=DEBUG

If you're using application.yml then:

logging.level.<package path>.MyClient: DEBUG

The log level can be set to tell Feign how much to log.

Options are:

  • NONE, No logging (DEFAULT)
  • BASIC, Log only the request method and URL and the response status code and execution time
  • HEADERS, Log the basic information along with request and response headers
  • FULL, Log the headers, body, and metadata for both requests and responses

Example:

logLevel(feign.Logger.Level.NONE)
or
logLevel(feign.Logger.Level.BASIC)
or
logLevel(feign.Logger.Level.HEADERS)
or
logLevel(feign.Logger.Level.FULL)

For more details, you can refer this

Answer from Maverick on Stack Overflow
🌐
Baeldung
baeldung.com › home › spring › spring boot › feign logging configuration
Feign Logging Configuration | Baeldung
February 26, 2025 - Feign client logging helps us to have a better view of the requests that have been made. To enable logging, we need to set the Spring Boot logging level to DEBUG for the class or package that contains our feign client in the application.properties ...
🌐
Medium
medium.com › @reetesh043 › handling-logging-in-spring-boot-feignclient-a-complete-guide-0831676b8526
Handling Logging in Spring Boot FeignClient: A Complete Guide | by Reetesh Kumar | Medium
August 5, 2025 - This post shows you how to enable and customize FeignClient logging in Spring Boot, with working code snippets and configuration examples.
🌐
Spring Cloud
cloud.spring.io › spring-cloud-openfeign › 2.2.x › reference › html
Spring Cloud OpenFeign
Feign logging only responds to the DEBUG level. ... The Logger.Level object that you may configure per client, tells Feign how much to log.
🌐
Apps Developer Blog
appsdeveloperblog.com › home › spring framework › spring cloud › feign client logging
Feign Client Logging - Apps Developer Blog
November 9, 2022 - @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class PhotoAppApiApplication { public static void main(String[] args) { SpringApplication.run(PhotoAppApiApplication.class, args); } @Bean Logger.Level feignLoggerLevel() { return Logger.Level.FULL; } } If you are interested in learning more about Spring Cloud and Microservices, please check out this video course: Spring Boot Microservices and Spring Cloud.
🌐
GitHub
github.com › swagger-api › swagger-codegen › issues › 10550
How to add Feign Client Logging in SpringBoot through ...
November 8, 2020 - logging: level: platform.client.parkingplus.api.ServicoPagamentoTicket2Api: DEBUG feign: client: config: default: loggerLevel: FULL · I could get it to work by creating a bean, but that's too evasive... I would not be able to change from SpringBoot's application.properties without a hack.
Author: swagger-api
🌐
Javacodemonk
javacodemonk.com › feign-client-logging-and-connection-timeout-spring-boot-60b8826d
Feign Client Logging and connection timeout
July 14, 2020 - feign: client: config: name_of_your_feign_client: (1) connectTimeout: 5000 readTimeout: 5000 loggerLevel: basic · If we want to set it across feign clients, we can configure default settings using following configuration: application.yml - Default Feign client configuration
🌐
O'Reilly
oreilly.com › library › view › mastering-spring-boot › 9781787127562 › 43853f02-3bf6-4c2f-8661-e94899a05cdd.xhtml
Feign logging - Mastering Spring Boot 2.0 [Book]
May 31, 2018 - The Feign client only responds to a DEBUG level and, by default, the file name of the log is the full class name of the interface used to create the Feign client. A logger is created for each Feign client.
Author: Dinesh Rajput
Published: 2018
Pages: 390
🌐
Mingliang
mingliang.me › blog › rest-client-logging-in-spring-boot
Rest client logging in spring boot - You Will Never Walk Alone
July 23, 2019 - A logger is created for each Feign client created. By default the name of the logger is the full class name of the interface used to create the Feign client.
Find elsewhere
🌐
GitHub
github.com › muratkarakas › feign-logger
GitHub - muratkarakas/feign-logger: Spring Boot Feign Client Custom Logging
Spring Boot Feign Client Custom Logging. Contribute to muratkarakas/feign-logger development by creating an account on GitHub.
Author: muratkarakas
🌐
Getdocs
spring.getdocs.org › en-US › spring-cloud-docs › spring-cloud-openfeign › spring-cloud-feign › feign-logging.html
Untitled :: Spring Docs
Spring Boot Docs · master · 1.5.19.RELEASE · Spring cloud docs · master · Spring data docs · master · Spring framework docs · master · Edit this Page · A logger is created for each Feign client created. By default the name of the logger is the full class name of the interface used ...
🌐
Mayukh Datta
thecoducer.com › 2023 › 03 › custom-logger-configuration-for-feign-clients
Custom Logger Configuration for Feign Clients · Mayukh Datta
March 26, 2023 - So, I created a custom logger for the Feign clients to customize the log statements. ... We create a configuration class in Spring Boot that instantiates a bean of our custom logger class.
Top answer
1 of 6
83

Feign has out of box logging mechanism and it can be achieved through simple steps.

If you are using spring-cloud-starter-feign

Feign using Slf4jLogger for logging.Feign logging documentation

As per doc, the below logging levels are available to configure,

  • NONE - No logging (DEFAULT).
  • BASIC - Log only the request method and URL and the response status code and execution time.
  • HEADERS - Log the basic information along with request and response headers.
  • FULL - Log the headers, body, and metadata for both requests and responses.

Injecting the Logger.Level bean is enough.

    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.BASIC;
    }

OR

If you prefer using configuration properties to configured all @FeignClient, you can create configuration properties with default feign name.

feign:
  client:
    config:
      default:
        loggerLevel: basic

of if you are using a newer version (Spring Boot 3) the config will be like:

spring:
  cloud:
    openfeign:
      client:
        config:
          default:
            loggerLevel: full

If you are using 'io.github.openfeign:feign-core'

If you are constructing the Feign builder then you can mention logLevel(Level.BASIC) as

Feign.builder()
    .logger(new Slf4jLogger())
    .logLevel(Level.BASIC)
    .target(SomeFeignClient.class, url);

We have the flexibility to customize the logging message

The default feign request and response logging

Request logging

Resopnse logging

we can customize the feign request, response logging pattern by overriding Logger#logRequest and Logger#logAndRebufferResponse methods. In the following example, we have customized request logging pattern

log(configKey, "---> %s %s HTTP/1.1 (%s-byte body) ", request.httpMethod().name(), request.url(), bodyLength);

and response logging pattern

log(configKey, "<--- %s %s HTTP/1.1 %s (%sms) ", request.httpMethod().name(), request.url(), status, elapsedTime);

The Full example is


import feign.Logger;
import feign.Request;
import feign.Response;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;

import static feign.Logger.Level.HEADERS;

@Slf4j
public class CustomFeignRequestLogging extends Logger {

    @Override
    protected void logRequest(String configKey, Level logLevel, Request request) {

        if (logLevel.ordinal() >= HEADERS.ordinal()) {
            super.logRequest(configKey, logLevel, request);
        } else {
            int bodyLength = 0;
            if (request.requestBody().asBytes() != null) {
                bodyLength = request.requestBody().asBytes().length;
            }
            log(configKey, "---> %s %s HTTP/1.1 (%s-byte body) ", request.httpMethod().name(), request.url(), bodyLength);
        }
    }

    @Override
    protected Response logAndRebufferResponse(String configKey, Level logLevel, Response response, long elapsedTime)
            throws IOException {
        if (logLevel.ordinal() >= HEADERS.ordinal()) {
            return super.logAndRebufferResponse(configKey, logLevel, response, elapsedTime);
        } else {
            int status = response.status();
            Request request = response.request();
            log(configKey, "<--- %s %s HTTP/1.1 %s (%sms) ", request.httpMethod().name(), request.url(), status, elapsedTime);
            return response;   
        }        
    }


    @Override
    protected void log(String configKey, String format, Object... args) {
        log.debug(format(configKey, format, args));
    }

    protected String format(String configKey, String format, Object... args) {
        return String.format(methodTag(configKey) + format, args);
    }
}

NOTE: Request payload can be easily logged through

String bodyText =
              request.charset() != null ? new String(request.body(), request.charset()) : null;

but be careful writing the response payload after you are reading the input stream Util.toByteArray(response.body().asInputStream()) then you have to construct the response again like response.toBuilder().body(bodyData).build(). Otherwise, you will end up with the expection. The reason is response streams are read and always closed before returning, thats why the method is named as logAndRebufferResponse

How to use the custom CustomFeignRequestLogging?

If you are building feign client using just 'io.github.openfeign:feign-core'

Feign.builder()
     .logger(new CustomFeignRequestLogging())
     .logLevel(feign.Logger.Level.BASIC);

If you are using 'org.springframework.cloud:spring-cloud-starter-openfeign'

@Configuration
public class FeignLoggingConfiguration {

    @Bean
    public CustomFeignRequestLogging customFeignRequestLogging() {
        return new CustomFeignRequestLogging();
    }

    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.BASIC;
    }
}

2 of 6
13

The accepted answer did not work for me until I added the following settings to my application.yml file:

logging:
  level:
    com:
      mypackage1:
        mysubackage1:
          mysubpackage2: DEBUG
🌐
CodingNConcepts
codingnconcepts.com › home › spring boot › configure feign client in spring boot
Configure Feign Client in Spring Boot - Coding N Concepts
June 8, 2021 - It is an alternative to RestTemplate ... specifications as an Interface · Client configurations such as encoding/decoding, timeout, and logging can just be done through property files....
🌐
GitHub
github.com › PouyaPouryaie › feign-client
GitHub - PouyaPouryaie/feign-client: This repository demonstrates how to programmatically implement a Feign client in a Spring Boot application · GitHub
This repository demonstrates how to programmatically implement a Feign client in a Spring Boot application (client) to interact with an external service (server). This approach provides fine-grained control over the Feign client's configuration.
🌐
Medium
medium.com › @somarouthu.sivaprasads › spring-cloud-feign-858c225e2341
Spring Cloud Feign. Logging: | by SivaprasadS | Medium
March 15, 2019 - To enable logging we have to set the feign.Logger level(Default is NONE). This can be done in 2 days · Setting feign.client.config.default.loggerLevel = FULL either in application.Properties / application.yml File
🌐
Junhyunny
junhyunny.github.io › spring-boot › spring-cloud › logging-for-feign-client
FeignClient 로깅 적용하기 - Junhyunny’s Devlogs
April 25, 2026 - package action.in.blog.config; import feign.Logger; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FeignLoggerConfig { @Bean Logger.Level feignLoggerLevel() { return Logger.Level.FULL; } } 간단한 테스트 코드를 통해 출력되는 로그를 살펴보자. 다음과 같은 BlogClient 인터페이스를 만든다. 메서드들을 수행할 때 출력되는 로그를 살펴본다. ... package action.in.blog.client; import action.in.blog.domain.Post; import org.springframework.cloud.openfeign.Feign
🌐
Medium
medium.com › @AlexanderObregon › navigating-client-server-communication-with-springs-feignclient-annotation-70376157cefd
Navigating Client-Server Communication with Spring’s @FeignClient Annotation
March 30, 2026 - After you’ve defined your Feign client interface and injected it into a Spring component, running your Spring Boot application should enable this feature. As soon as the application is running, any call to the getUserOrders API will internally ...