我使用的是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
根据文档,日志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: