我最初的想法是,可以编辑一些log4j属性来捕获YARN或Oozie中的应用程序日志。然后我想到,对于运行在各种集群节点上的特定应用程序,Kafka将是捕获和聚合日志消息的一种更简单的方法。通过订阅主题监视分布式系统要比通过日志文件钓鱼容易得多。
我注意到Kafka有一个log4j附加器,所以我试图创建一个最小的可复制示例(发布在github:https://github.com/alexwoolford/spring-boot-log-to-kafka-example上)。下面是pom.xml
中的一个片段:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-log4j-appender</artifactId>
<version>0.10.0.0</version>
</dependency>
<dependency>
<groupId>net.logstash.log4j</groupId>
<artifactId>jsonevent-layout</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
我的log4j.properties文件如下所示:
log4j.rootLogger=INFO
log4j.appender.KAFKA=org.apache.kafka.log4jappender.KafkaLog4jAppender
log4j.appender.KAFKA.layout=net.logstash.log4j.JSONEventLayoutV1
log4j.appender.KAFKA.topic=logs
log4j.appender.KAFKA.brokerList=hdp-single-node:6667
log4j.appender.KAFKA.syncSend=true
log4j.appender.KAFKA.producer.type=async
log4j.logger.io.woolford=INFO, KAFKA
log4j:WARN No appenders could be found for logger (org.apache.kafka.clients.producer.ProducerConfig).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
即使这个应用程序运行并执行了我所需要的操作,这些警告也暗示我配置错误。你能看到需要改变什么吗?
此外,我注意到Spring Boot默认使用Logback,并且我注意到有一个开源项目logback-kafka-appender,它允许Logback附加到Kafka。Kafkalog4j附加是最好的方式为Spring引导日志到Kafka?
Log4j2有一个Kafka附加器。需要将spring-boot-starter-log4j2
和jackson-databind
工件添加到pom.xml
中:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-log4j-appender</artifactId>
<version>0.10.0.0</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.6</version>
</dependency>
</dependencies>
然后创建了一个XML格式的log4j2.XML
文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" name="spring-boot-log-to-kafka-example" packages="io.woolford">
<Appenders>
<Kafka name="kafkaAppender" topic="logs">
<JSONLayout />
<Property name="bootstrap.servers">hdp-single-node:6667</Property>
</Kafka>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="kafkaAppender"/>
</Root>
<Logger name="org.apache.kafka" level="WARN" />
</Loggers>
</Configuration>
日志记录消息以JSON格式发送给Kafka,例如。
{
"timeMillis": 1485736022854,
"thread": "Thread-1",
"level": "INFO",
"loggerName": "org.springframework.context.annotation.AnnotationConfigApplicationContext",
"message": "Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@20140db9: startup date [Sun Jan 29 17:26:52 MST 2017]; root of context hierarchy",
"endOfBatch": false,
"loggerFqcn": "org.apache.commons.logging.impl.SLF4JLocationAwareLog",
"threadId": 19,
"threadPriority": 5
}
如何更改Springboot Kafka的日志记录?我在我们的Splunk服务器上看到了超过200万条消息,但什么都不起作用: 还尝试了: 依赖性: 这些都没有任何作用。我错过什么了吗?
我有一个需求,从一个Kafka主题消费,做一些工作的记录和生产到另一个主题与spring-kafka 2.1.7。其他需求是事务性的,只有一次语义,重试和错误处理。当提交一个记录失败时,我应该做3次重试,记录每个重试消息重试主题。当所有重试失败时,将记录发送到一个死信主题。我查看了https://github.com/spring-projects/spring-kafka/issues/575,
我在一个Spring Boot应用程序中有一个关于登录的配置问题。我希望我的看起来像默认的Spring Boot控制台附加器。如何从Spring Boot默认控制台附加器继承模式? 下面是我的配置
我下载了kafka-clients-0.9.0.0。jar与maven一起使用,我希望我会看到类似于Kafka日志链接中的日志记录 然而,我不知道为什么我没有得到任何日志记录,即使我设置了引导。purpuse上的服务器错误,但它只是在没有发出任何警告的情况下被卡住了。我添加了几行代码以使用log4j打印到一个文件中,这似乎是可行的,但不知道为什么Kafka不能将事件记录到log4j中。 请注意,s
互联网上有许多帖子建议如何从logback迁移到log4j2进行Spring引导日志记录。 参考这个sof post-Spring Boot日志与log4j2-我已经配置我的项目使用log4j2。然后我添加了一些基本的log4j2.xml和log4j2.properties文件来测试。 但是在这些更改之后,我的项目无法进行任何日志记录。有人能帮我找出毛病吗? 项目代码可在github-https:
C:\Users\Admin\anaconda3\lib\site packages\ipykernel\u启动器。py:7:SettingWithCopyWarning:试图在数据帧切片的副本上设置值 请参阅留档中的注意事项:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view