重定向假装&功能区记录到log4j2

时间:2015-06-17 14:08:09

标签: spring-boot log4j2 spring-cloud netflix netflix-feign

我目前使用spring cloud netflix和log4j2。 log4j2配置来自类路径中的xml。当我运行应用程序时,我看到假装&功能区日志未重定向到配置中指定的记录器。我已为 com.netflix.ribbon &要在调试级别记录 feign 包。

但是,为spring配置的日志正确地重定向到指定的appender,ribbon& amp;假装不是。

我正在使用gradle与spring-boot-starter-logging被忽略& amp;在我的构建中添加了spring-boot-starter-log4j2。

我看到假装has a way我们可以配置slf4j,但由于我们使用注释驱动的假装支持,我无法配置假装使用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:调试假装/功能区的原因是为了理解微服务设置中两台不同机器之间奇怪的假装行为

2 个答案:

答案 0 :(得分:4)

查看Spring Cloud的FeignClientFactoryBean表明您可以选择自动装配feign.Logger.Level类型的bean。尝试使用

@Configuration中注册这样的bean
@Bean
public feign.Logger.Level feignLoggerLevel() {
    return feign.Logger.Level.FULL;
}

答案 1 :(得分:0)

@ jensfischerhh的回答会解决很多案件,但看起来错过了一个人。

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

两个配置必须一起存在。

related doccument in spring-cloud-netflix

bean config(在@Configuration注释类中)

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

log config

</Configuration>
    <Loggers>
        <logger name="your.feign-interface-package" level="trace">
    </Loggers>
</Configuration>