LoginSignup
0
0

More than 1 year has passed since last update.

Log4j Append機能を使ったKafkaへログ転送

Last updated at Posted at 2022-07-02

Inspiration

Javaアプリのログからデータ分析を行うことはできるかが気になり、まずログを収集する方法について調べました。
他のライブラリも同様にできますが、初めに目についたものがLog4jだったのでできるかを検証してます。
結果はできたものの、これによってアプリにさらなる外部ライブラリ依存が発生します。

環境

  • JDK 8 以上
  • kafka-client-3.2.0
  • log4j-api-2.17.2
  • log4j-core-2.17.2
  • log4j-iostream-2.17.2
  • log4j-slf4j-impl-2.17.2
  • log4j-web-2.17.2
  • lz4-java-1.8.0
  • slf4j-api-1.7.36
  • snappy-java-1.1.8.4
  • tjconsole-1.7-all
  • zstd-jni-1.5.2-1

実装

下記のソースコードを使います。
コードについて出力するだけのロジックになります。

package com.tutorial;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Main {
	
	private static final Logger logger = LogManager.getLogger(Main.class);
	   
	public static void main(String[] args) {

		System.out.println("Initial RUnnn");
		logger.info("test runun!");
	}

}

log4jの設定XMLは下記になります。

xml log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>

    <Kafka name="Kafka" topic="quickstart-events">
      <PatternLayout pattern="%date %message"/>
        <Property name="bootstrap.servers">localhost:9092</Property>
    </Kafka>

  </appenders>

  <loggers>
    <logger name="com.tutorial.Main" level="trace">
      <appender-ref ref="Console"/>
      <appender-ref ref="Kafka"/>
    </logger>
    <root level="error">
      <appender-ref ref="Console"/>
    </root>
  </loggers>
</configuration>

動作確認

  1. まず、Kafkaのサーバーとブローカーサーバを実行します。
    スクリーンショット 2022-07-02 14.48.51.png
    スクリーンショット 2022-07-02 14.49.25.png

  2. ターゲットイベントを確認するためのConsumerを起動します。

  3. Javaのアプリを実行します。

  4. コンソールからのログです。
    スクリーンショット 2022-07-02 17.11.27.png

  5. Kafka-Consumerからのログです。
    スクリーンショット 2022-07-02 14.51.38.png

終わり

Log4jのAppend機能を使うことで追加で必要になったライブラリですが、kafka-client, slf4jなど必要になります。log4jのライブライだと、JDK6から使えるものですが、kafka-clientの最低要求JDKバージョンが8になるのでJDK6だと制約を受けることになります。
アプリにデータ集計のために追加でソースコードを記載しなくても済む方法になるので既存の資産を修正したくない場合には有効な方法になるかと思います。ただ、Kafkaを使っていますので追加で管理する箇所が発生する点とアプリログをKafkaに送ることで想定外のエラーが発生する可能性があります。
他のログライブラリだと、Logbackからもできそうですので、好みで選んでいただければと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0