1

我目前使用带有 log4j2 的 spring cloud netflix。log4j2 配置来自类路径中的 xml。当我运行应用程序时,我看到 feign 和 Ribbon 日志没有被重定向到配置中指定的记录器。我已经为com.netflix.ribbonfeign包配置了日志,以便在调试级别记录。

但是,为 spring 配置的日志正确重定向到指定的 appender,ribbon & feign 没有。

我正在使用忽略 spring-boot-starter-logging 的 gradle 并在我的构建中添加了 spring-boot-starter-log4j2。

我看到feign有一种方法可以配置 slf4j,但是由于我们使用注释驱动的 feign 支持,我无法将 feign 配置为使用 slf4j 进行日志记录。

任何帮助表示赞赏。

我的 log4j2.xml 看起来有点像

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="log-path">logs</Property>
        <Property name="log-fileName">test</Property>
    </Properties>

    <Appenders>
        <Console name="console-log" target="SYSTEM_OUT">
            <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
        </Console>

        <RollingFile name="trace-log" fileName="${log-path}/${log-fileName}-trace.log" filePattern="${log-path}/${log-fileName}_trace-%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingFile>

        <RollingFile name="error-log" fileName="${log-path}/${log-fileName}-error.log" filePattern="${log-path}/${log-fileName}_error-%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <logger name="org.springframework" level="trace" additivity="false">
            <AppenderRef ref="trace-log" />
        </logger>
        <logger name="feign" level="trace" additivity="false">
            <AppenderRef ref="trace-log" />
        </logger>
        <logger name="com.netflix.ribbon" level="trace" additivity="false">
            <AppenderRef ref="trace-log" />
        </logger>
        <Root level="info">
            <AppenderRef ref="console-log"></AppenderRef>
            <AppenderRef ref="error-log" level="ERROR"/>
        </Root>
    </Loggers>
</Configuration>

PS:调试 feign/ribbon 的原因是为了了解我们微服务设置中两台不同机器之间奇怪的 feign 行为

4

2 回答 2

5

查看 Spring Cloud 的FeignClientFactoryBean显示,您可以选择自动装配类型为 的 bean feign.Logger.Level@Configuration尝试在您的使用中注册这样一个bean

@Bean
public feign.Logger.Level feignLoggerLevel() {
    return feign.Logger.Level.FULL;
}
于 2015-06-22T15:06:21.357 回答
0

@jensfischerhh 的回答可以解决很多情况,但看起来错误地错过了一件事情。

您需要使用 feignLoggerLevel Bean配置 feign 生成的类的记录器级别。

两个配置必须同时存在。

spring-cloud-netflix 中的相关文档

bean 配置(在 @Configuration 注释类中)

@Bean
public feign.Logger.Level feignLoggerLevel() {
    return feign.Logger.Level.FULL;
}  

日志配置

</Configuration>
    <Loggers>
        <logger name="your.feign-interface-package" level="trace">
    </Loggers>
</Configuration>
于 2017-03-20T06:14:18.063 回答