繁体   English   中英

降低 Log4j2 的内部日志级别(使用 Kafka Appender)

[英]reduce the internal log level for Log4j2 (with Kafka Appender)

我正在使用 Log4j2 (v2.17.2) 将信息直接发送到 kafka,并且正在使用 XML 来创建配置(正如许多文章提到的 XML 可以处理更多配置选项 - 属性没有)。 我遇到的问题是我的控制台充满了不相关的 INFO 日志行(例如):

[main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka version: 3.1.0
[main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka commitId: 37edeed0777bacb3
[main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka startTimeMs: 1652851625060
[pool-2-thread-1] INFO org.apache.kafka.clients.consumer.KafkaConsumer - [Consumer clientId=consumer-logInfo-1, groupId=logInfo] Subscribed to topic(s): logInfo
[pool-2-thread-1] INFO org.apache.kafka.clients.Metadata - [Consumer clientId=consumer-logInfo-1, groupId=logInfo] Cluster ID: 37Prit7oRwSnQ-CX5_Iwvw

我已经从programmatically-change-log-level-in-log4j2 中尝试了所有技术,但没有更改日志记录:

Configurator.setLevel("org.apache.kafka", Level.WARN);

有没有人幸运地从 INFO 中降低日志级别? 我真的不希望通过这种级别的信息来查找问题!

- 编辑 -

我已经按照 class 进行了明确设置:

Configurator.setLevel("org.apache.kafka.clients.producer.ProducerConfig", Level.ERROR);
Configurator.setLevel("org.apache.kafka.clients.consumer.ConsumerConfig", Level.ERROR);

在日志中具有相同的结果:

[main] INFO org.apache.kafka.clients.producer.ProducerConfig - ProducerConfig values: 
[Thread-1] INFO org.apache.kafka.clients.consumer.ConsumerConfig - ConsumerConfig values: 

事实证明,答案非常简单:kafka-clients-3.1.0.jar(需要让 kafka appender 工作)使用 slf4j 进行日志记录,因此不会响应 log4j 级别的任何更改!

以下行修复了该问题:

System.setProperty(org.slf4j.impl.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "ERROR");

由于kafka使用slf4j的另一种方法是添加到pom.xml

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.11.1</version>
</dependency>

在您的日志中这样做应该已经出现 kafka 条目。 然后进入 log4j2.xml 你可以控制日志级别:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error" shutdownHook="disable">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">-->
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%c{1}:%L][%-5p] %m%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="${sys:log.level:-DEBUG}">
            <AppenderRef ref="Console" />
        </Root>
        <Logger name="org.apache.kafka" level="WARN"/>
    </Loggers>
</Configuration>

重要的一行是: <Logger name="org.apache.kafka" level="WARN"/>

如果您正在使用 log4j2 并且还尝试使用 log4j2.properties 执行此操作,那么这对我有用:

logger.kafka-org.name = org.apache.kafka
logger.kafka-org.level = warn
logger.kafka.name = kafka
logger.kafka.level = warn
logger.kafka-state.name = state.change.logger
logger.kafka-state.level = warn
logger.zookeeper.name = org.apache.zookeeper
logger.zookeeper.level = warn
logger.curator.name = org.apache.curator
logger.curator.level = warn

我希望这可以挽救一些可怜的灵魂,我花了两个小时才弄清楚这一点。 您需要按名称 map 记录器,这就是实施者所说的(通常是 package,但并非总是如此),然后设置级别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM