ITPub博客

首页 > 应用开发 > Java > Slf4j和Log4j 2

Slf4j和Log4j 2

原创 Java 作者:壹頁書 时间:2016-05-28 21:29:35 0 删除 编辑
SLF4j 是一个门面模式.


它是在编译时绑定的,只需要把slf4j-api和slf4j-log4j放到classpath上,即实现绑定
slf4j-api中会去调用StaticLoggerBinder这个类获取绑定的工厂类
而每个日志实现会在自己的jar中提供这样一个类,这样slf4j-api就实现了编译时绑定实现
slf4j-api引用的StaticLoggerBinder类,会在打包时删除.

集成Log4j 2

maven
  1. <dependencies>  
  2.         <dependency>  
  3.             <groupId>org.apache.logging.log4j</groupId>  
  4.             <artifactId>log4j-slf4j-impl</artifactId>  
  5.             <version>2.5</version>  
  6.         </dependency>  
  7.         <dependency>  
  8.             <groupId>org.apache.logging.log4j</groupId>  
  9.             <artifactId>log4j-api</artifactId>  
  10.             <version>2.5</version>  
  11.         </dependency>  
  12.         <dependency>  
  13.             <groupId>org.apache.logging.log4j</groupId>  
  14.             <artifactId>log4j-core</artifactId>  
  15.             <version>2.5</version>  
  16.         </dependency>  
  17.         <dependency>  
  18.             <groupId>org.slf4j</groupId>  
  19.             <artifactId>slf4j-api</artifactId>  
  20.             <version>1.7.7</version>  
  21.         </dependency>  
  22.         <dependency>  
  23.             <groupId>junit</groupId>  
  24.             <artifactId>junit</artifactId>  
  25.             <version>3.8.1</version>  
  26.             <scope>test</scope>  
  27.         </dependency>  
  28.     </dependencies>  

配置文件
log4j2.xml
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <configuration status="error">  
  3.     <!--先定义所有的appender-->  
  4.     <appenders>  
  5.         <!--这个输出控制台的配置-->  
  6.         <Console name="Console" target="SYSTEM_OUT">  
  7.             <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->  
  8.             <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>  
  9.             <!--这个都知道是输出日志的格式-->  
  10.             <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>  
  11.         </Console>  
  12.         <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->  
  13.         <File name="log" fileName="logs/test.log" append="true">  
  14.             <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>  
  15.         </File>  
  16.   
  17.         <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->  
  18.         <RollingFile name="RollingFile" fileName="logs/app.log"  
  19.                      filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">  
  20.             <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>  
  21.             <SizeBasedTriggeringPolicy size="50MB"/>  
  22.         </RollingFile>  
  23.           
  24.         <Async name="Async">  
  25.             <AppenderRef ref="log"/>  
  26.         </Async>  
  27.     </appenders>  
  28.     <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->  
  29.     <loggers>  
  30.         <!--建立一个默认的root的logger-->  
  31.         <root level="error">  
  32.             <appender-ref ref="RollingFile"/>  
  33.             <appender-ref ref="Console"/>  
  34.         </root>  
  35.         <!--   
  36.             additivity开启的话,由于这个logger也是满足root的,所以会被打印两遍。  
  37.             不过root logger 的level是error,为什么Bar 里面的trace信息也被打印两遍呢?  
  38.          -->  
  39.         <Logger name="com.vv.logtest" level="info" additivity="false">  
  40.             <appender-ref ref="Async"/>  
  41.         </Logger>  
  42.     </loggers>  
  43. </configuration>  

调用:


测试了一下,
Async用时4s,而RollingFile需要26s.性能还是差了很多的.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-2108544/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 极招尽展
请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6339966