使用Log4j的Append功能将日志传输到Kafka

灵感

我想知道是否可以通过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 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>

确认行动

スクリーンショット 2022-07-02 14.51.38.png

结束

使用Log4j的Append功能导致需要额外的库,如kafka-client、slf4j等。虽然log4j是从JDK6开始可用的库,但kafka-client的最低要求JDK版本是8,如果使用JDK6,将会受到限制。
对于不想修改现有资产的情况,这是一种有效的方法,可以避免在应用程序中添加额外的源代码以进行数据汇总。但由于使用了Kafka,可能会发生额外的管理问题和向Kafka发送应用程序日志导致意外错误的可能性。
其他日志库,如Logback,似乎也可以做到,所以您可以根据个人喜好进行选择。

广告
将在 10 秒后关闭
bannerAds