最近想把java程序日誌接入ELK,方便以後容器化管理,接入ELK有兩種方式實現,第一種是在程序的地方都放置一個L(Logstash),但是這中方式不太現實,
另一種就是將日誌輸入kafka,有kafka傳入ELK中,而將日誌傳入kafka,不想在代碼中實現,如果logback日誌可以直接輸出到kafka最好,就找解決方案。
這是logback的配置文件信息:
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH🇲🇲ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- This is the kafkaAppender --> <appender name="kafkaAppender" class="com.github.danielwegener.logback.kafka.KafkaAppender"> <encoder> <!--<pattern>%d{HH🇲🇲ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>--> <pattern>{"theme":"aaa","thread":"%thread","level":"%-5level","msg":"%msg"}</pattern> </encoder> <topic>test</topic> <keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy" /> <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" /> <!-- Optional parameter to use a fixed partition --> <!-- <partition>0</partition> --> <!-- Optional parameter to include log timestamps into the kafka message --> <!-- <appendTimestamp>true</appendTimestamp> --> <!-- each <producerConfig> translates to regular kafka-client config (format: key=value) --> <!-- producer configs are documented here: https://kafka.apache.org/documentation.html#newproducerconfigs --> <!-- bootstrap.servers is the only mandatory producerConfig --> <producerConfig>bootstrap.servers=192.168.1.1:9092</producerConfig> <!-- this is the fallback appender if kafka is not available. --> <appender-ref ref="STDOUT" /> </appender> <root level="info"> <appender-ref ref="kafkaAppender" /> </root> </configuration>
然後pom.xml需要引入的jar包
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.github.danielwegener</groupId> <artifactId>logback-kafka-appender</artifactId> <version>0.2.0-RC1</version> <scope>runtime</scope> </dependency>
有些會引入一些其他包我解釋下:
logback-classic包含了logback-core,不需要再單獨引用了。
logback-access訪問模塊與Servlet容器集成提供通過Http來訪問日誌的功能(用的少)。
參考資源:https://github.com/danielwegener/logback-kafka-appender