记录日志不起作用

Mag*_*ick 13 java feign

我正在尝试为Feign rest客户端的每个请求进行日志记录.但是我无法使日志工作,而'标准'Slf4j日志记录确实有效.

我有以下内容:

public MyClient() {
        initConnectionProperties();

        this.service = Feign.builder()
                .contract(new JAXRSContract())
                .decoder(getJacksonDecoder())
                .encoder(getJacksonEncoder())


                .requestInterceptor(new BasicAuthRequestInterceptor(user, password))
                //.client(new OkHttpClient())
                .logger(new Slf4jLogger(MyClient.class)) //not working

                .logLevel(feign.Logger.Level.BASIC)
                .target(MyClient.class, this.url);
        logger.info("Connection parameters: url = " + url + ", user = " + user); //Is working
    }
Run Code Online (Sandbox Code Playgroud)

Rol*_*and 10

首先,您需要将 feign 客户端类的日志记录级别设置为 DEBUG,正如 Maverick 在他的回答中已经提到的那样。

然后,如果您使用 Spring Boot,除了创建 @Configuration 类的选项之外,Niraj 在他的回答中已经提到,您可以在应用程序属性/yml 配置文件中单独配置每个客户端:

feign: client: config: the_name_of_your_feign_client: connectTimeout: 5000 readTimeout: 5000 loggerLevel: basic

或者使用 default 而不是 the_name_of_your_feign_client 以相同的方式配置所有 feign 客户端:

feign: client: config: default: connectTimeout: 5000 readTimeout: 5000 loggerLevel: basic


Mav*_*ick 8

您需要按以下方式在application.properties中配置日志记录:

logging.level.<package path>.MyClient=DEBUG
Run Code Online (Sandbox Code Playgroud)

如果您使用的是application.yml,则:

logging.level.<package path>.MyClient: DEBUG
Run Code Online (Sandbox Code Playgroud)

日志级别可以设置为告诉Feign要记录多少。

选项有:

  • 无,无日志记录(默认)
  • BASIC,仅记录请求方法和URL以及响应状态代码和执行时间
  • HEADERS,记录基本信息以及请求和响应头
  • FULL,记录请求和响应的标题,正文和元数据

例:

logLevel(feign.Logger.Level.NONE)
or
logLevel(feign.Logger.Level.BASIC)
or
logLevel(feign.Logger.Level.HEADERS)
or
logLevel(feign.Logger.Level.FULL)
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,您可以参考


Nir*_*ane 7

这就是我能够使用Custom Config类登录的方式

注意虚拟日志仅响应DEBUG级别。

配置类

@Configuration
public class UserClientConfig {

    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.HEADERS;
    }
} 
Run Code Online (Sandbox Code Playgroud)

客户

@FeignClient(name = "User", url = "http://localhost:8080",configuration=UserClientConfig.class)
public interface UserClient {

    @RequestMapping(method = RequestMethod.GET, value = "/user")
    List<User> getAllUsers();    

}
Run Code Online (Sandbox Code Playgroud)

application.properties

logging.level.<pcakgepath>.UserClient: DEBUG
Run Code Online (Sandbox Code Playgroud)


Jea*_*vre 5

private void setup() {
    //...
    feignBuilder.logger(new MyLogger());
    feignBuilder.logLevel(Logger.Level.FULL);
}

private static class MyLogger extends Logger {
    @Override
    protected void log(String s, String s1, Object... objects) {
        System.out.println(String.format(s + s1, objects)); // Change me!
    }
}
Run Code Online (Sandbox Code Playgroud)


Ton*_*phy 5

我没有设置客户端,并且我的客户端调用失败,并且日志记录不起作用..一旦我添加了 OkHttpClient 并更改了 logback.xml 文件,工作正常

    MyApi myApi = Feign.builder()
            .client(new OkHttpClient())
            .decoder(new JacksonDecoder())
            .encoder(new JacksonEncoder())
            .logger(new Slf4jLogger())
            .logLevel(feign.Logger.Level.FULL)
            .target(MyApi.class, "http://localhost:8082");
Run Code Online (Sandbox Code Playgroud)

这是 logback.xml

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %green([%thread]) %highlight(%level) %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    <logger name="feign.Logger" level="DEBUG" />
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)


Sti*_*imp 4

您可能还需要将 log4j 日志记录级别配置为feignDEBUG。如果您使用的是 Spring Boot,对我有用的是:

curl -X POST http://localhost/loggers/feign -H 'Content-Type: application/json' -d '{"configuredLevel": "DEBUG"}'
Run Code Online (Sandbox Code Playgroud)