java - 如何从 log4j 的日志文件中获取 Apache Camel 消息历史记录?

标签 java log4j apache-camel log4j2

Apache Camel documantation是一个不错的消息历史记录。我想要这个用于我的 errorHandler。所以我愿意

errorHandler(
            deadLetterChannel("direct:deadLetter")
                .logExhaustedMessageHistory(true)
                .maximumRedeliveries(3)
                .retryAttemptedLogLevel(LoggingLevel.WARN)
                );

还有:

CamelContext context = getContext();
context.setMessageHistory(true);

但是漂亮的消息历史记录没有显示,不在控制台中,也不在日志文件中。我该如何激活它?

我的 log4j 附加程序是:

<Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{yyyy/MM/dd-HH:mm:ss} %-5p %C:%M:%L ~ %m%n"/>
    </Console>
...

我用谷歌搜索,但我只找到上面的信息,但这些都不起作用。

谢谢

编辑:

这项工作,但我丢失了 deadLetterChannel。这是一个错误?

errorHandler(
        defaultErrorHandler()
        .logExhausted(true)
        .logExhaustedMessageHistory(true)
        );

最佳答案

我解决了问题:

errorHandler(
        deadLetterChannel("direct:deadLetter")
            .maximumRedeliveries(3)
            .retryAttemptedLogLevel(LoggingLevel.WARN)
            );


from("direct:deadLetter").id("deadLetter")
    .routeId("deadLetter")
    .errorHandler(defaultErrorHandler().disableRedelivery())
    .process(new Processor() {
        public void process(Exchange msg) {
            String MsgHist = org.apache.camel.util.MessageHelper.dumpMessageHistoryStacktrace(msg, new DefaultExchangeFormatter(), false);
            LOG.error(MsgHist, msg);
            msg.getOut().setBody(msg.getIn().getBody(Document.class));
            msg.getOut().setHeaders(msg.getIn().getHeaders());
            msg.getOut().setHeader("MessageHistory",MsgHist);
        }
    })
    .log(LoggingLevel.ERROR,"${exception.stacktrace}")
    .setHeader("ErrorMessage",simple("${exception}",String.class))
    .setHeader("ErrorStacktrace",simple("${exception.stacktrace}",String.class))
            .to("activemqWithoutTransactions:errors");

是的,这是一个错误: https://issues.apache.org/jira/browse/CAMEL-8755 2.16解决

关于java - 如何从 log4j 的日志文件中获取 Apache Camel 消息历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30104088/

相关文章:

tomcat - 如何为每个 tomcat 服务器实例编写唯一的日志文件?

java - 自定义 Log4j2 包装器和输出

java - 当响应代码为 400 时,如何从 REST 客户端访问 apache-camel 中的有效负载?

java - JVM堆和Tomcat堆的关系

java - Android 中的垃圾收集器

java - Android 编辑位图 channel

java - 为什么我的 log4j 消息没有出现在日志文件中?

java - Apache Camel 从 AWS VPC 终端节点收到状态 400 错误请求

angularjs - 使用 Apache Camel 服务于 AngularJS

java - 如何将数据从 Java Activity 传递到 React Native?