Log4j2具有Kafka附加程序。必须将
spring-boot-starter-log4j2和
jackson-databind工件添加到
pom.xml:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-log4j-appender</artifactId> <version>0.10.0.0</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.6</version> </dependency></dependencies>
然后,我创建了一个XML格式的
log4j2.xml文件:
<?xml version="1.0" encoding="UTF-8"?><Configuration status="info" name="spring-boot-log-to-kafka-example" packages="io.woolford"> <Appenders> <Kafka name="kafkaAppender" topic="logs"> <JSonLayout /> <Property name="bootstrap.servers">hdp-single-node:6667</Property> </Kafka> </Appenders> <Loggers> <Root level="INFO"> <AppenderRef ref="kafkaAppender"/> </Root> <Logger name="org.apache.kafka" level="WARN" /> </Loggers></Configuration>
记录消息以JSON格式发送到Kafka,例如
{ "timeMillis": 1485736022854, "thread": "Thread-1", "level": "INFO", "loggerName": "org.springframework.context.annotation.AnnotationConfigApplicationContext", "message": "Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@20140db9: startup date [Sun Jan 29 17:26:52 MST 2017]; root of context hierarchy", "endOfBatch": false, "loggerFqcn": "org.apache.commons.logging.impl.SLF4JLocationAwareLog", "threadId": 19, "threadPriority": 5}


