【发布时间】:2016-02-17 19:55:51
【问题描述】:
我正在运行一个使用 logback 的 Spring Boot 应用程序。这个想法是将日志消息发送到 RabbitMQ 服务器。为此,我创建了一个扩展 ch.qos.logback.core.AppenderBase 的附加程序。
这是我的 logback-spring.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="messaging" class="com.foo.logging.appender.MessagingAppenderLogback" />
<root level="info">
<appender-ref ref="messaging" />
</root>
</configuration>
一切都好。但是,在 MessagingAppenderLogback 中,我希望用来发送消息的 RabbitTemplate 为空。
@Component
public class MessagingAppenderLogback extends AppenderBase<ILoggingEvent> {
@Autowired
RabbitTemplate rabbitTemplate;
public MessagingAppenderLogback(){ }
@Override
protected void append(ILoggingEvent event) {
System.out.println(" MessagingAppenderLogback#append w/ event " + event);
// rabbitTemplate.convertAndSend(event);
}
}
根据documentation,我知道“日志系统已在应用程序的早期初始化......”
我想知道我必须做什么才能在我的 appender 中使用 rabbitTemplate。
【问题讨论】:
-
@gonqin 您将看不到自动装配的组件,因为 Spring 正在创建一个实例,而 Logback 也在使用您正在使用的空构造函数创建另一个实例。我也遇到了同样的问题,但是如果您摆脱空构造函数并使用构造函数注入将 EventPublisher 组件添加到控制器,那么一切都应该正常工作。抱歉,我不得不将此作为答案发布,因为我还没有评论的声誉。
标签: spring spring-boot logback