当前位置: 首页 > 知识库问答 >
问题:

Camel 3.5记录器、Spring Boot和log4j2

韩志专
2023-03-14

我使用的是Camel3.5和Spring Boot2.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");
    }
}

processor类:

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);
    }
}
<?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

<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

共有1个答案

东方俊材
2023-03-14

根据文档,日志eip将路由名称作为日志名,请参阅camel.apache.org/components/latest/eips/log-eip.html。要使用java dsl设置名称,可以使用.log(logginglevel.debug,“my-name”,“${body}”)

 类似资料:
  • 假设我有一个输入文件,在HDFS中为这个文件创建了三个块。假设我有三个数据节点,每个数据节点存储一个块。如果我有3个输入拆分,则3个映射器将并行运行,以处理各自数据节点的本地数据。每个映射器使用输入格式和记录读取器以键值对的形式获取输入。此场景使用TextInputFormat,其中记录是来自文件的完整文本行。 这里的问题是,如果在第一个块的末尾有记录中断,会发生什么。 1)Hadoop如何读取此

  • 主要内容:1. 监听器,2. 记录器,3. 内置监听器和记录器,4. 默认记录器,5. 邮件记录器这是一个允许我们在执行期间监视Ant进度的进度的功能。 Ant使用两个概念进行监视:侦听器和记录器,两者都由Ant本身提供。 请参阅下面的所有支持的侦听器。 1. 监听器 构建开始 构建完成后 目标开始后 目标完成后 任务开始后 任务完成后 消息记录 2. 记录器 记录器用于扩展侦听器功能。它具有各种功能,如下文中所示。 它将信息记录到控制台或使用参数指定的文件。 它是日志记录级别(,,)。 Em

  • 使用Spring Boot1.4和Logback,我在中配置日志记录: 请注意,第二种配置的建议直接来自Spring Cloud Service Registration and Discovery文档。它在信息和其他“正常”级别上工作得很好。但是,日志还显示(由我重新格式化):

  • 问题内容: 我想在我的应用程序中将slf4j + logback用于两个目的-日志和审计。 对于日志记录,我以常规方式记录日志: 对于审计,我创建一个特殊的命名记录器并登录到它: 登录配置: 问题:通过审核记录器记录的消息出现两次-一次在AUDIT_LOGGER下,一次在根记录器下。 14:41:57.975 [main]调试com.gammay.example.Main–> main() 14:

  • 我正在尝试设置log4j2以使用异步记录器将所有消息记录到滚动文件中。 是否有一种方法可以创建另一个记录程序来捕获所有事件?还有别的想法吗? 下面是我的log4j2.xml: