Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel 重写或拦截Camel日志记录_Apache Camel - Fatal编程技术网

Apache camel 重写或拦截Camel日志记录

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

现有的应用程序使用驼峰日志(bog)“log()”DSL以及日志组件

我们希望拦截或覆盖,以便每个日志消息也注销一个特定的头值(例如,x-correlation-id=ABC-123)


什么是一个好的、惯用的方法来实现这一点?

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的地方