Apache camel 重写或拦截Camel日志记录
现有的应用程序使用驼峰日志(bog)“log()”DSL以及日志组件 我们希望拦截或覆盖,以便每个日志消息也注销一个特定的头值(例如,x-correlation-id=ABC-123)Apache camel 重写或拦截Camel日志记录,apache-camel,Apache Camel,现有的应用程序使用驼峰日志(bog)“log()”DSL以及日志组件 我们希望拦截或覆盖,以便每个日志消息也注销一个特定的头值(例如,x-correlation-id=ABC-123) 什么是一个好的、惯用的方法来实现这一点?Apache Camel从版本2.19.0开始就支持可插拔。这是非常强大的,因为它的方法onLog,在日志记录之前被调用,具有Exchange、camelogger和message的实例。您可以使用al来定制消息大多数没有限制 LogListener的实现: public
什么是一个好的、惯用的方法来实现这一点?Apache Camel从版本
2.19.0
开始就支持可插拔。这是非常强大的,因为它的方法onLog
,在日志记录之前被调用,具有Exchange
、camelogger
和message的实例。您可以使用al来定制消息大多数没有限制
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);
}
}
getContext().addLogListener(new MyLogListener());
日志侦听器注册:
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);
}
}
getContext().addLogListener(new MyLogListener());
如果您使用的是Apache Camel版本
2.21.0
及更新版本,则不需要将其注册到上下文,因为它是在注册表中查找的,因此将MyLogListener
注释为@Bean
就足够了。2.19.0
。这非常强大,因为它的方法是onLog
,它在登录之前被调用,具有Exchange
、camelogger
和message的实例。您可以在那里自定义消息,几乎没有任何限制
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);
}
}
getContext().addLogListener(new MyLogListener());
日志侦听器注册:
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);
}
}
getContext().addLogListener(new MyLogListener());
如果您使用的是Apache Camel版本
2.21.0
及更新版本,则不需要将其注册到上下文中,因为它是在注册表中查找的,因此将MyLogListener
注释为@Bean
就足够了。看看MDC日志记录-它在slf4j中被称为其他东西。@ClausIbsen,驼峰日志监听器,在answ中提到过下面的er看起来是一个很好的解决方案。这比MDC日志记录(假设我们想要的值在消息头中)好吗?这也很好,LogListener是一个特定于骆驼的东西,而MDC更一般。如果LogListener仅来自骆驼日志EIP和日志组件,则使用LogListener。您需要它。@ClausIbsen,如果我使用MDC进行骆驼日志记录,是否需要使用骆驼生成的“面包屑”如果我想记录一个任意的Camel头,那么我也需要使用LogListener?啊!我想我需要创建一个处理器(或等效的处理器)这就是我将头放在MDC中的地方,看看MDC日志记录——它在slf4j中被称为其他东西。@下面的答案中提到的驼峰日志监听器ClausIbsen看起来是一个很好的解决方案。这比MDC日志记录好吗(假设我们想要的值在消息的头中)?这也很好,LogListener是一个特定于骆驼的东西,而MDC更一般。如果LogListener仅来自骆驼日志EIP和日志组件,则使用LogListener。您需要它。@ClausIbsen,如果我使用MDC进行骆驼日志记录,是否需要使用骆驼生成的“面包屑”因为相关id看起来像是如果我想记录一个任意的Camel头,我也需要使用LogListener?啊!我想我需要创建一个处理器(或等效的),这就是我将头放入MDC的地方