【问题标题】:Camel 3.5 Logger, Spring Boot and log4j2Camel 3.5 记录器、Spring Boot 和 log4j2
【发布时间】:2021-02-28 23:21:24
【问题描述】:

我正在使用 Camel 3.5 和 Spring Boot 2.3.4 应用程序。 我正在尝试在 log4j2.xml 文件中使用 log4j2 和配置日志级别和附加程序。 它在处理器中工作,但不能直接在 RouteDefinition 中工作。

package org.example.builders;

import org.apache.camel.LoggingLevel;
import org.apache.camel.builder.RouteBuilder;
import org.example.processors.Watch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

@Service
public class Builder extends RouteBuilder {
    private final static Logger LOGGER = LoggerFactory.getLogger(Builder.class.getName());

    @Override
    public void configure() {
        from("{{uri.quartz.debug}}")
                // OK
                .log(LoggingLevel.DEBUG, LOGGER,"${header.fireTime} - Quartz DEBUG 1")
                // NOK
                .log(LoggingLevel.DEBUG, "${header.fireTime} - Quartz DEBUG 2")
                .log(LoggingLevel.INFO, "${header.fireTime} - Quartz INFO")
                .log(LoggingLevel.TRACE, "${header.fireTime} - Quartz TRACE")
                .log(LoggingLevel.WARN, "${header.fireTime} - Quartz WARN")
                .log(LoggingLevel.ERROR, "${header.fireTime} - Quartz ERROR")
                .process(new Watch())
                .to("mock:end");
    }
}

处理器类:

package org.example.processors;

import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Watch implements Processor {

    private final static Logger LOGGER = LogManager.getLogger(Watch.class.getName());
    @Override
    public void process(Exchange exchange) throws Exception {
        Object body = exchange.getIn().getBody();
        LOGGER.log(Level.ALL, "LOGGER -> ALL");
        LOGGER.log(Level.TRACE, "LOGGER -> TRACE");
        LOGGER.log(Level.DEBUG, "LOGGER -> DEBUG");
        LOGGER.log(Level.INFO, "LOGGER -> INFO");
        LOGGER.log(Level.WARN, "LOGGER -> WARN");
        LOGGER.log(Level.ERROR, "LOGGER -> ERROR");
        exchange.getMessage().setBody(body);
    }
}

他是log4j2.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="30">

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT"/>
    </Appenders>

    <Loggers>
        <Root level="error">
            <AppenderRef ref="Console" />
        </Root>

        <Logger name="org.example.processors" level="trace"></Logger>
        <Logger name="org.example.builders" level="debug"></Logger>
    </Loggers>

</Configuration>

这是控制台输出。仅打印错误日志级别。 我必须调用方法 .log(LoggingLevel.DEBUG, LOGGER, 才能得到我想要的。

Tue Nov 17 18:28:10 CET 2020 - Quartz DEBUG 1
Tue Nov 17 18:28:10 CET 2020 - Quartz ERROR
LOGGER -> TRACE
LOGGER -> DEBUG
LOGGER -> INFO
LOGGER -> WARN
LOGGER -> ERROR

编辑

感谢 Luca Burgazzoli

在 log4j2.xml 中

<Logger name="logging-route" level="debug"></Logger>

在 dsl 中:

.log(LoggingLevel.DEBUG, "logging-route", "${header.fireTime} - Quartz DEBUG 2")

控制台输出:

Tue Nov 17 19:43:25 CET 2020 - Quartz DEBUG 1
Tue Nov 17 19:43:25 CET 2020 - Quartz DEBUG 2
Tue Nov 17 19:43:25 CET 2020 - Quartz ERROR
LOGGER -> TRACE

【问题讨论】:

  • 根据文档,日志eip以路由名作为日志名,见camel.apache.org/components/latest/eips/log-eip.html。要使用 java dsl 设置名称,您可以使用类似 .log(LoggingLevel.DEBUG, "my-name", "${body}")
  • 这是你所期望的吗?
  • 是的,当然。我编辑了我的帖子。非常感谢你应该发布一个答案,以便我可以验证它。

标签: spring-boot logging apache-camel log4j2


【解决方案1】:

根据文档,日志eip以路由名作为日志名,见camel.apache.org/components/latest/eips/log-eip.html。要使用 java dsl 设置名称,您可以使用类似 .log(LoggingLevel.DEBUG, "my-name", "${body}")

【讨论】:

    猜你喜欢
    • 2015-09-29
    • 2019-03-26
    • 2017-12-20
    • 2014-10-30
    • 1970-01-01
    • 2021-11-19
    • 2019-08-31
    • 1970-01-01
    • 2020-11-05
    相关资源
    最近更新 更多