springboot整合log4j2大体步骤是很简单的,只是中间有一些小细节需要注意。
首先pom文件中增加log4j2
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
要在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>
然后在resource下增加log4j2的配置文件log4j2.xml.
然后在默认配置文件application.properties中指定一下log4j2的配置文件:
logging.config=classpath:log4j2.xml
这里需要注意一下,按照官方文档的说法,是会自动发现日志的配置文件的,在开发调试过程中也确实是这样。但是如果要打成war包部署到tomcat中,而且是linux下的tomcat。就会有问题,手动指定一下才会生效。如果只是打jar包通过main方法启动是没有问题的。
至此springboot整合log4j2就基本完成了。
然后在log4j2中配置flume
还是从pom文件开始:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-flume-ng</artifactId>
</dependency>
<dependency>
<groupId>org.apache.flume</groupId>
<artifactId>flume-ng-embedded-agent</artifactId>
<version>1.7.0</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
log4j2支持的flume是embedded模式的,所以加入flume-ng-embedded-agent
然后log4j2的配置文件中加入flumeAppend
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss SSS} [myapp] %m%n"/>
</Console>
<Flume name="FlumeAppender" compress="false" type="Embedded" >
<Property name="channel.type">memory</Property>
<Property name="channel.capacity">200</Property>
<Property name="sinks">agent1</Property>
<Property name="agent1.type">avro</Property>
<Property name="agent1.hostname">192.168.0.100</Property>
<Property name="agent1.port">44444</Property>
<Property name="agent1.batch-size">100</Property>
<Property name="processor.type">failover</Property>
<PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss SSS} [myapp] %m%n" />
</Flume>
</Appenders>
<Loggers>
<Logger name="sysLog" level="trace">
<AppenderRef ref="FlumeAppender"/>
</Logger>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
好了,结束!