【发布时间】:2015-09-02 19:58:09
【问题描述】:
我目前使用带有 log4j2 的 spring cloud netflix。 log4j2 配置来自类路径中的 xml。当我运行应用程序时,我看到 feign 和 Ribbon 日志没有被重定向到配置中指定的记录器。我已经为 com.netflix.ribbon 和 feign 包配置了日志以在 debug 级别进行记录。
但是,为 spring 配置的日志正确地重定向到指定的 appender,ribbon 和 feign 没有。
我在使用 gradle 时忽略了 spring-boot-starter-logging 并在构建过程中添加了 spring-boot-starter-log4j2。
我看到可以配置 slf4j 的 feign has a way,但是由于我们使用注释驱动的 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 行为
【问题讨论】:
-
您可以创建一个
feign.Logger类型的 bean,它会自动装入。feign.slf4j.Slf4jLogger是默认值。问题之一是只有一个记录器(即日志名称)feign.Logger。 -
将以下 bean 添加到启动应用程序类中,并提供帮助。 @Bean public Logger feignLogger() { return new Slf4jLogger();我是否需要进行任何 log4j2.xml 更改(除了已经注册的记录器,记录器名称设置为 feign)?
-
仅供参考,我用 @FeignClient 注释了存根接口,我使用的是 Spring boot 1.2.1.RELEASE& spring cloud version of 1.0.1.RELEASE
-
我从未使用过 log4j2,所以我无能为力。
-
斯宾塞,谢谢。 @dsyer,对此有何建议?
标签: spring-boot log4j2 spring-cloud netflix netflix-feign