使用Log4j2把日志输出到Kafka - 2877206/docs GitHub Wiki
<?xml version="1.0" encoding="UTF-8"?>
<!--
status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出
monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。
-->
<configuration status="off" monitorInterval="1800">
<Properties>
<!-- 配置日志文件输出目录 -->
<Property name="LOG_HOME">/opt/tomcat/logs</Property>
</Properties>
<appenders>
<Kafka name="Kafka" topic="log-test">
<PatternLayout pattern="%date %message"/>
<Property name="bootstrap.servers">192.168.252.130:9092</Property>
</Kafka>
`<!--这个输出控制台的配置-->`
`<Console name="Console" target="SYSTEM_OUT">`
`<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->`
`<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>`
`<!-- 输出日志的格式 -->`
`<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>`
`</Console>`
`<!-- 设置日志格式并配置日志压缩格式(service.log.年份.gz) -->`
`<RollingRandomAccessFile name="service_appender"`
`immediateFlush="false" fileName="${LOG_HOME}/service.log"`
`filePattern="${LOG_HOME}/service.log.%d{yyyy-MM-dd}.log.gz">`
`<!--`
`%d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间`
`%p : 日志输出格式`
`%c : logger的名称`
`%m : 日志内容,即 logger.info("message")`
`%n : 换行符`
`%C : Java类名`
`%L : 日志输出所在行数`
`%M : 日志输出所在方法名`
`hostName : 本地机器名`
`hostAddress : 本地ip地址`
`-->`
`<PatternLayout>`
`<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M -- %msg%xEx%n</pattern>`
`</PatternLayout>`
`<Policies>`
`<TimeBasedTriggeringPolicy interval="1" modulate="true" />`
`</Policies>`
`</RollingRandomAccessFile>`
`<!-- DEBUG日志格式 -->`
`<RollingRandomAccessFile name="service_debug_appender"`
`immediateFlush="false" fileName="${LOG_HOME}/service.log"`
`filePattern="${LOG_HOME}/service.log.%d{yyyy-MM-dd}.debug.gz">`
`<PatternLayout>`
`<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M -- %msg%xEx%n</pattern>`
`</PatternLayout>`
`<Policies>`
`<TimeBasedTriggeringPolicy interval="1" modulate="true" />`
`</Policies>`
`</RollingRandomAccessFile>`
`</appenders>`
`<loggers> `
`<!-- 配置日志的根节点 -->`
`<root level="info">`
`<appender-ref ref="Kafka" />`
`<appender-ref ref="Console"/>`
`</root>`
`<!-- 第三方日志系统 -->`
`<logger name="org.springframework.core" level="info"/>`
`<logger name="org.springframework.beans" level="info"/>`
`<logger name="org.springframework.context" level="info"/>`
`<logger name="org.springframework.web" level="info"/>`
`<logger name="org.jboss.netty" level="warn"/>`
`<logger name="org.apache.http" level="warn"/>`
`<!-- 日志实例(info),其中'service-log'继承root,但是root将日志输出控制台,而'service-log'将日志输出到文件,通过属性'additivity="false"'将'service-log'的的日志不再输出到控制台 -->`
`<logger name="service_log" level="info" includeLocation="true" additivity="true">`
`<appender-ref ref="service_appender"/>`
`</logger>`
`<!-- 日志实例(debug) -->`
`<logger name="service_log" level="debug" includeLocation="true" additivity="false">`
`<appender-ref ref="service_debug_appender"/>`
`</logger>`
`<Logger name="org.apache.kafka" level="INFO" /> <!-- avoid recursive logging -->`
`</loggers>`
</configuration>
注意:2.5以上版本。
`<dependency>`
`<groupId>org.apache.logging.log4j</groupId>`
`<artifactId>log4j-api</artifactId>`
`<version>2.6.2</version>`
`</dependency>`
`<dependency>`
`<groupId>org.apache.logging.log4j</groupId>`
`<artifactId>log4j-core</artifactId>`
`<version>2.6.2</version>`
`</dependency>`
`<dependency>`
`<groupId>org.apache.logging.log4j</groupId>`
`<artifactId>log4j-web</artifactId>`
`<version>2.6.2</version>`
`</dependency>`
log4j2与slf4j集成
`<dependency>`
`<groupId>org.slf4j</groupId>`
`<artifactId>slf4j-api</artifactId>`
`<version>1.7.21</version>`
`</dependency>`
`<dependency>`
`<groupId>org.apache.logging.log4j</groupId>`
`<artifactId>log4j-api</artifactId>`
`<version>2.6.2</version>`
`</dependency>`
`<dependency>`
`<groupId>org.apache.logging.log4j</groupId>`
`<artifactId>log4j-core</artifactId>`
`<version>2.6.2</version>`
`</dependency>`
`<!-- log4j-slf4j-impl(用于log4j2与slf4j集成) -->`
`<dependency>`
`<groupId>org.apache.logging.log4j</groupId>`
`<artifactId>log4j-slf4j-impl</artifactId>`
`<version>2.6.2</version>`
`</dependency>`
// log4j2方式
private static final org.apache.logging.log4j.Logger LOG = org.apache.logging.log4j.LogManager.getLogger(Logstrap.class);
// slf4j方式
private static final org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(LoggerFactory.class);
监听Kafka:
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic log-test --from-beginning