【发布时间】:2021-05-08 14:48:12
【问题描述】:
我想使用 log4j kafka appender 将我的应用日志消息流式传输到 kafka。
我的应用程序正在使用 spring boot 和 log4j2。
我在主题中看到了启动日志消息,但没有看到应用程序中使用的日志语句。
我是否遗漏了 log4j2 配置中的任何内容?
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug" name="kafka-logs"
packages="myapp.kafka.test">
<Appenders>
<Kafka name="Kafka" topic="test-kafka-topic">
<JSONLayout />
<Property name="bootstrap.servers">server1,server2</Property>
</Kafka>
<Async name="Async">
<AppenderRef ref="Kafka"/>
</Async>
<Console name="stdout" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5p [%-7t] %F:%L - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Kafka"/>
<AppenderRef ref="stdout"/>
</Root>
<Logger name="org.apache.kafka" level="WARN" />
</Loggers>
pom.xml
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.10</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-log4j-appender</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
Java 代码
@SpringBootApplication
public class TestApplication {
private static final Logger logger =
LoggerFactory.getLogger(TestApplication.class);
public static void main(String[] args) {
SpringApplication application = new SpringApplication(TestApplication.class);
logger.info("Before Application Startup");
application.run(args);
logger.info("After Application Startup");
}
}
登录 Kafka:
{
"thread" : "main",
"level" : "INFO",
"loggerName" : "TestApplication",
"message" : "Started TestApplication in 17.19 seconds (JVM running for 22.67)",
"endOfBatch" : false,
"loggerFqcn" : "org.apache.commons.logging.LogFactory$Log4jLog",
"instant" : {
"epochSecond" : 1555422668,
"nanoOfSecond" : 856000000
},
"threadId" : 1,
"threadPriority" : 5
}
控制台输出:
08:51:08.856 [main] INFO TestApplication - Started TestApplication in 17.19 seconds (JVM running for 22.67)
[main] INFO TestApplication - Testing my application from TestApplication
[main] ERROR TestApplication - Testing my application from TestApplication
【问题讨论】:
-
Kafka 批处理消息。另外,您使用的是异步追加,因此很可能并非所有消息都立即刷新到 Kafka
-
我删除了异步附加程序,但我的日志语句仍然没有被推送到 kafka。我更新了 kafka 和控制台中的示例日志消息。
-
我没有看到为日志语句调用附加程序。不确定我的 log4j2.xml 中是否需要任何其他配置
-
不确定您希望看到的确切内容。
-
正如我所说,我在 kafka 中看到服务器启动消息,但没有来自应用程序的日志消息,如 log.error 或 log.info 消息被忽略。
标签: java apache-kafka log4j2 kafka-producer-api