log4j2配置输出日志到Kafka

本文详细介绍了如何使用Java的Apache Kafka客户端和Log4j2框架进行日志配置,包括配置文件的两种形式:yml风格和xml风格。重点展示了如何将日志输出到控制台和Kafka主题,以及如何为特定包设置不同的日志级别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,需要引入依赖包:

		<dependency> 
			<groupId>org.apache.kafka</groupId>
			<artifactId>kafka-clients</artifactId>
			<version>0.9.0.1</version>
		</dependency>

如果配置文件是yml格式的,还需要这个依赖:

		<dependency>	<!-- 加上这个才能辨认到log4j2.yml文件 -->
			<groupId>com.fasterxml.jackson.dataformat</groupId>
			<artifactId>jackson-dataformat-yaml</artifactId>
		</dependency>

yml格式的配置方法(文件名:log4j2.yml):

Configuration:
  status: warn

  Appenders:
    Console:  #输出到控制台
      name: CONSOLE
      target: SYSTEM_OUT
      ThresholdFilter:
        level: trace
        onMatch: ACCEPT
        onMismatch: DENY
      PatternLayout:
        pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n"
    Kafka: #输出到Kafka
      name: KAFKA
      topic:  test
      ThresholdFilter:
        level: error
        onMatch: ACCEPT
        onMismatch: DENY
      PatternLayout:
        pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n"
      Property:
        - name: bootstrap.servers
          value: 192.168.0.9:9092

  Loggers:
    Root:
      level: info
      AppenderRef:
        - ref: CONSOLE
        - ref: KAFKA
    Logger: # 为com.xjj包配置特殊的Log级别,方便调试
      - name: com.xjj
        additivity: false
        level: trace
        AppenderRef:
          - ref: CONSOLE
          - ref: KAFKA
      - name: org.apache.kafka #听说这样可以避免递归调用
        level: INFO

xml格式的配置方法(文件名:log4j2.xml):

<Configuration status="warn" monitorInterval="30" strict="true"	schema="Log4J-V2.2.xsd">
	<Appenders>
		<!-- 输出到控制台 -->
		<Console name="Console" target="SYSTEM_OUT">
			<!-- 需要记录的级别 -->
			<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
			<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" />
		</Console>
		
		<!-- 输出错误日志到Kafka -->
		<Kafka name="KAFKA" topic="test">
			<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
			<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" />
			<Property name="bootstrap.servers">192.168.0.9:9092</Property>
		</Kafka>
	</Appenders>

	<Loggers>
		<Root level="info"> <!-- 全局配置 -->
			<AppenderRef ref="Console" />
			<AppenderRef ref="KAFKA"/>
		</Root>

		<Logger name="com.xjj" level="trace" additivity="false">
			<AppenderRef ref="Console" />
			<AppenderRef ref="KAFKA"/>
		</Logger>
		
		<Logger name="org.apache.kafka" level="INFO" /> <!-- avoid recursive logging -->
	</Loggers>
</Configuration>

大功告成。



### Log4j2 配置日志输出Kafka 的示例 以下是基于 `log4j2` 和 `KafkaAppender` 实现日志发送至 Kafka 的具体配置方法。该配置适用于 `.properties` 文件格式。 #### 1. 添加依赖项 为了使 `Log4j2` 支持向 Kafka 发送日志消息,需引入必要的 Maven 或 Gradle 依赖项: ```xml <!-- 对于 Maven --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.x.x</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>3.y.z</version> </dependency> ``` 或者对于 Gradle 用户: ```gradle // 对于 Gradle implementation 'org.apache.logging.log4j:log4j-core:2.x.x' implementation 'org.apache.kafka:kafka-clients:3.y.z' ``` 上述版本号应根据实际需求替换为兼容的稳定版[^1]。 --- #### 2. 配置 `log4j2.properties` 在项目的资源目录下创建或编辑 `log4j2.properties` 文件,按照以下模板完成配置: ```properties # 定义 Appenders appender.console.type = Console appender.console.name = STDOUT appender.console.layout.type = PatternLayout appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n # Kafka Appender 配置 appender.kafka.type = Kafka appender.kafka.name = KafkaAppender appender.kafka.topic = log_topic_name appender.kafka.syncSend = true appender.kafka.keySerializerClass = org.apache.kafka.common.serialization.StringSerializer appender.kafka.valueSerializerClass = org.apache.kafka.common.serialization.StringSerializer appender.kafka.brokerUrl = localhost:9092 appender.kafka.layout.type = PatternLayout appender.kafka.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n # Root Logger 配置 rootLogger.level = info rootLogger.appenderRef.stdout.ref = STDOUT rootLogger.appenderRef.kafka.ref = KafkaAppender ``` 在此配置中: - **topic**: 设置目标 Kafka 主题名称。 - **brokerUrl**: 指定 Kafka Broker 地址列表(逗号分隔多个地址)。 - **syncSend**: 是否启用同步模式,默认为异步。 - **keySerializerClass & valueSerializerClass**: 序列化器类名,通常使用默认值即可[^2]。 --- #### 3. 测试环境验证 确保本地已启动 Kafka 并运行正常。可以通过命令行测试生产者/消费者功能来确认连接无误: ```bash # 启动 Kafka 控制台生产者 kafka-console-producer.sh --bootstrap-server localhost:9092 --topic log_topic_name # 启动 Kafka 控制台消费者 kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic log_topic_name ``` 如果一切设置正确,则应用中的日志会自动推送到指定的主题并可通过控制台查看[^3]。 --- #### 注意事项 - 如果项目中有其他工具(如 Hive),它们可能也依赖类似的日志框架,此时建议保持一致性以减少维护成本。 - 当前配置未涉及高级选项(如重试机制、超时时间等)。如有特殊需求可进一步扩展参数。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值