覆盖或拦截Camel日志记录

时间:2018-05-16 10:44:20

标签: apache-camel

现有应用程序使用Camel日志记录(bog“log()”DSL,以及日志组件。

我们希望拦截或覆盖,以便每条日志消息也会记录特定的标头值(例如x-correlation-id = ABC-123)

实现这一目标的好方法是什么?

1 个答案:

答案 0 :(得分:2)

自版本2.19.0以来,Apache Camel支持可插入LogListener。这非常强大,因为在日志记录之前调用的方法onLog具有ExchangeCamelLogger和消息的实例。您可以在那里自定义消息,几乎没有任何限制。

LogListener的实现:

public class MyLogListener implements LogListener {
    @Override
    public String onLog(Exchange exchange, CamelLogger camelLogger, String message) {
        return String.format("%s: %s", exchange.getIn().getHeader(Exchange.CORRELATION_ID), message);
    }
}

LogListener注册:

getContext().addLogListener(new MyLogListener());

如果您使用的是Apache Camel版本2.21.0及更新版本,则不需要将其注册到上下文,因为它在注册表中被查找,因此将MyLogListener注释为@Bean就足够了。