springboot默认的日志实现采用的是logback,但logback官方没有支持flume,所以就采用log4j2。
我用的springboot是1.5.12版本的,首先要修改springboot的日志jar包,主要是不用springboot默认的日志,采用log4j2。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 不引入默认的日志 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
<!-- 不引入默认的日志 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency> <!-- 引入log4j2依赖 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- 写入flume就靠这个jar包了 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-flume-ng</artifactId>
</dependency>
接下来在log4j2.xml中配置flume的相关信息,这边我采用avro的方式传日志:
<?xml version="1.0" encoding="UTF-8"?>
<!--设置log4j2的自身log级别为warn-->
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,
当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="warn" monitorInterval="30">
<!--先定义所有的appender-->
<appenders>
<!--这个输出控制台的配置-->
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
<Flume name="eventLogger" compress="true" type="avro">
<Agent host="10.10.10.10" port="4444"/>
<Agent host="10.10.10.11" port="4444"/>
<RFC5424Layout enterpriseNumber="18060" includeMDC="true" appName="MyApp"/>
</Flume>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<root level="all">
<appender-ref ref="Console"/>
<AppenderRef ref="eventLogger"/>
</root>
</loggers>
</configuration>
flume的配置的话,只要把source改成avro即可。我采用的是flume1.8。下面是我写的flume配置,主要是用于测试,所以直接打印出来了:
agent1.sources = s1
agent1.sinks = k1 k2 k3
agent1.channels = c2
# Describe/configure the source
agent1.sources.s1.type = avro
agent1.sources.s1.bind = 10.1.12.42
agent1.sources.s1.port = 4444
agent1.sinks.k2.type = logger
agent1.sinks.k2.maxBytesToLog = 4096
agent1.channels.c2.type=memory
agent1.channels.c2.capacity=10000
agent1.channels.c2.transactionCapacity=10000
# Bind the source and sink to the channel
agent1.sources.s1.channels = c2
agent1.sinks.k2.channel = c2
亲测有效~