OozieからJavaアクションとして実行されるSpringブートアプリケーションからログ出力をキャプチャする方法を聞かれました。KafkaへのSpring-Bootロギング:警告を排除する方法。ベストプラクティス
私の最初の考えは、いくつかの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に追加することができます。 Kafkaのlog4jアペンダーは、Spring BootがKafkaにログインする最も良い方法ですか?