SLF4j 是一个门面模式.

它是在编译时绑定的,只需要把slf4j-api和slf4j-log4j放到classpath上,即实现绑定
slf4j-api中会去调用StaticLoggerBinder这个类获取绑定的工厂类
而每个日志实现会在自己的jar中提供这样一个类,这样slf4j-api就实现了编译时绑定实现
slf4j-api引用的StaticLoggerBinder类,会在打包时删除.
集成Log4j 2
maven
-
<dependencies>
-
<dependency>
-
<groupId>org.apache.logging.log4j</groupId>
-
<artifactId>log4j-slf4j-impl</artifactId>
-
<version>2.5</version>
-
</dependency>
-
<dependency>
-
<groupId>org.apache.logging.log4j</groupId>
-
<artifactId>log4j-api</artifactId>
-
<version>2.5</version>
-
</dependency>
-
<dependency>
-
<groupId>org.apache.logging.log4j</groupId>
-
<artifactId>log4j-core</artifactId>
-
<version>2.5</version>
-
</dependency>
-
<dependency>
-
<groupId>org.slf4j</groupId>
-
<artifactId>slf4j-api</artifactId>
-
<version>1.7.7</version>
-
</dependency>
-
<dependency>
-
<groupId>junit</groupId>
-
<artifactId>junit</artifactId>
-
<version>3.8.1</version>
-
<scope>test</scope>
-
</dependency>
-
</dependencies>
配置文件
log4j2.xml
-
<?xml version="1.0" encoding="UTF-8"?>
-
<configuration status="error">
-
-
<appenders>
-
-
<Console name="Console" target="SYSTEM_OUT">
-
-
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
-
-
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
-
</Console>
-
-
<File name="log" fileName="logs/test.log" append="true">
-
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
-
</File>
-
-
-
<RollingFile name="RollingFile" fileName="logs/app.log"
-
filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
-
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
-
<SizeBasedTriggeringPolicy size="50MB"/>
-
</RollingFile>
-
-
<Async name="Async">
-
<AppenderRef ref="log"/>
-
</Async>
-
</appenders>
-
-
<loggers>
-
-
<root level="error">
-
<appender-ref ref="RollingFile"/>
-
<appender-ref ref="Console"/>
-
</root>
-
<!--
-
additivity开启的话,由于这个logger也是满足root的,所以会被打印两遍。
-
不过root logger 的level是error,为什么Bar 里面的trace信息也被打印两遍呢?
-
-->
-
<Logger name="com.vv.logtest" level="info" additivity="false">
-
<appender-ref ref="Async"/>
-
</Logger>
-
</loggers>
-
</configuration>
调用:

测试了一下,
Async用时4s,而RollingFile需要26s.性能还是差了很多的.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-2108544/
,如需转载,请注明出处,否则将追究法律责任。