Oozie의 Java 액션으로 실행되는 Spring Boot 애플리케이션의 로그 출력을 캡쳐하는 방법을 묻는 질문을 받았다.Kafka에 스프링 부트 로깅 : 경고를 제거하는 방법; 베스트 프랙티스
초기 생각에 YARN 또는 Oozie 내부의 응용 프로그램 로그를 캡처하기 위해 일부 log4j 속성을 편집 할 수 있다고 생각했습니다. 그런 다음 Kafka가 다양한 클러스터 노드에서 실행되는 특정 응용 프로그램에 대한 로그 메시지를 캡처하고 집계하는 훨씬 쉬운 방법이 될 것입니다. 로그 파일을 통해 낚시하는 것보다 주제에 가입하여 분산 시스템을 모니터링하는 것이 훨씬 쉽습니다.
나는 카프카가 log4j 애 펜더를 가지고있어서 최소한의 재현 가능한 예 (github : https://github.com/alexwoolford/spring-boot-log-to-kafka-example에 게시 됨)를 만들려고 노력했다.
이<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 파일은 다음과 같습니다 : 여기 pom.xml
에서 단편이다
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.
에도이 응용 프로그램이 생각을 실행하고 내가 필요로하는 것을하면, 경고는 내가 잘못 구성된 것을 제안한다. 변경해야 할 것을 볼 수 있습니까?
또한 스프링 부트는 기본적으로 Logback을 사용하며 Logoff가 카프카에 추가되도록 허용하는 오픈 소스 프로젝트 logback-kafka-appender이 있다는 것을 알고 있습니다. Kafka log4j appender가 Spring Boot가 Kafka에 로그인하는 가장 좋은 방법입니까?