1、jar包依赖
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.9.0.1</version>
</dependency>
2、
application.yml配置文件
#指定log配置
#需要把日志传到kafka用文件log4j2-kafka.xml,如果不用则使用log4j2-pro.xml
logging:
config: classpath:log4j2-kafka.xml
3、
log4j2-kafka.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<!-- 文件输出格式 -->
<Property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level [%thread] %c [%L] -| %msg%n</Property>
<!-- 配置kafka服务器地址 -->
<Property name="SERVER">10.22.0.163:9092</Property>
</Properties>
<Appenders>
<!-- 控制台 -->
<Console name="console" target="SYSTEM_OUT" follow="true">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="ACCEPT"/>
<PatternLayout>
<Pattern>[%d] [%p] [%C:%L] [%t] [%m]%n</Pattern>
</PatternLayout>
</Console>
<!-- 输出日志到Kafka -->
<Kafka name="KAFKA" topic="log-test">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" />
<Property name="bootstrap.servers">${SERVER}</Property>
</Kafka>
<RollingFile name="RollingFileInfo" fileName="./logs/info.log"
filePattern="./logs/info-%d{yyyy-MM-dd}-%i.log">
<Filters>
<ThresholdFilter level="INFO"/>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<RollingFile name="RollingFileWarn" fileName="./logs/warn.log"
filePattern="./logs/warn-%d{yyyy-MM-dd}-%i.log">
<Filters>
<ThresholdFilter level="WARN"/>
<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<RollingFile name="RollingFileError" fileName="./logs/error.log"
filePattern="./logs/error-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="ERROR"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="RollingFileInfo"/>
<AppenderRef ref="RollingFileWarn"/>
<AppenderRef ref="RollingFileError"/>
<AppenderRef ref="KAFKA"/>
</Root>
<Logger name="org.apache.kafka" level="INFO" />
</Loggers>
</Configuration>
4、测试类
package cn.sun.consumer.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import cn.sun.core.controller.AbstractController;
@RestController
public class KafakaTestController extends AbstractController {
private static final long serialVersionUID = 2953461977737387067L;
private final Logger logger = LoggerFactory.getLogger(KafakaTestController.class);
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
@RequestMapping(value = "/send")
public String sendKafka() {
String message = "测试发送kafka日志";
logger.info("****************准备发送kafka消息***************************"+ message);
kafkaTemplate.send("test-log", "key", message);
logger.info("发送kafka成功.");
return "发送kafka成功";
}
}
5、结果