我在 Java 应用程序中使用 kafka-clients 库,并且日志没有附加到我在 log4j2.xml 中指定的 kafka 日志中。但是,
org.springframework.kafka
日志会很好地附加到我指定的日志中。
我注意到kafka-clients使用slf4j,根本原因与此相关吗?
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns="https://logging.apache.org/xml/ns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
https://logging.apache.org/xml/ns
https://logging.apache.org/xml/ns/log4j-config-2.xsd">
<Appenders>
<Console name="CONSOLE">
<PatternLayout pattern="%p - %m%n"/>
</Console>
<File name="MAIN" fileName="logs/main.log">
<JsonTemplateLayout/>
</File>
<File name="KAFKALOG" fileName="logs/kafka.log">
<PatternLayout pattern="%d [%t] %p %c - %m%n"/>
</File>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="CONSOLE" level="WARN"/>
<AppenderRef ref="MAIN"/>
</Root>
<Logger name="org.springframework.kafka" level="INFO">
<AppenderRef ref="KAFKALOG"/>
</Logger>
<Logger name="org.apache.kafka" level="INFO">
<AppenderRef ref="KAFKALOG"/>
</Logger>
</Loggers>
</Configuration>
您需要将 SLF4J 到 Log4j2 桥接依赖项添加到您的项目中。
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
<version>x.xx.x</version>
</dependency>
并且您可能需要稍微修改 kafka 记录器配置以捕获所有 Kafka 相关日志
<Loggers>
<Root level="INFO">
<AppenderRef ref="CONSOLE" level="WARN"/>
<AppenderRef ref="MAIN"/>
</Root>
<!-- Combine both Kafka loggers into one -->
<Logger name="kafka" level="INFO" additivity="false">
<AppenderRef ref="KAFKALOG"/>
</Logger>
<Logger name="org.apache.kafka" level="INFO" additivity="false">
<AppenderRef ref="KAFKALOG"/>
</Logger>
<Logger name="org.springframework.kafka" level="INFO" additivity="false">
<AppenderRef ref="KAFKALOG"/>
</Logger>