Java 2009-09-06 22:31:22 阅读249 评论0 字号:大中小
1、介绍: SLF4J - 一个通用的日志门面库,为各种Logging API提供了一套通用的日志接口,更多信息请参考官方网站。 SLF4J会根据classpath中所存在的适配器的jar来决定将使用的日志实现库。 若需要将使用了其它logging APIs的第三方类库或已有代码的日志调用迁移到SLF4J,需要替换下面的jar:
SLF4J 支持参数化的log字符串,避免了之前为了减少字符串拼接的性能损耗而不得不写的if(logger.isDebugEnable()),现在你可以直接写:logger.debug(“current user is: {}”, user)。拼装消息被推迟到了它能够确定是不是要显示这条消息的时候,但是获取参数的代价并没有幸免。同时,日志中的参数若超过三个,则需要将参数以数组的形式传入,如: Object[] params = {value1, value2, value3}; logger.debug(“first value: {}, second value: {} and third value: {}.”, params); 现在Hibernate、Jetty、Spring-OSGi、Wicket和MINA等项目都已经迁移到了SLF4J,由此可见SLF4J的影响力不可忽视。 LogBack - 一个通用可靠、快速灵活的日志框架,更多信息请参考官方网站。 LogBack 将作为Log4j的替代,和slf4j组成新的日志系统的完整实现。LogBack分为三个模块:logback-core、logback- classic和logback-access。logback-core是其它两个模块的基础;logback-classic是log4j的一个改良版本; logback-access与Servlet容器集成提供通过Http来访问日志的功能。 LogBack声称具有极佳的性能: “ 某些关键操作,比如判定是否记录一条日志语句的操作,其性能得到了显著的提高。这个操作在LogBack中需要3纳秒,而在Log4J中则需要30纳秒。 LogBack创建记录器(logger)的速度也更快:13毫秒,而在Log4J中需要23毫秒。更重要的是,它获取已存在的记录器只需94纳秒,而 Log4J需要2234纳秒,时间减少到了1/23。跟JUL相比的性能提高也是显著的”。 2、快速上手: 所需jar: slf4j-api-1.4.3.jar - 一定是要的,直接支持logback实现 jcl104-over-slf4j-1.4.3.jar - 使用common-loggin的接口,底层还是由SLF4J来决定哪种实现机制 slf4j-jcl-1.4.3.jar - 使用SLF4J的接口,底层由common-loggin实现(不能和jcl104-over-slf4j-1.4.3.jar同时使用) slf4j-log4j12-1.4.3.jar - 使用SLF4J的接口,底层由log4j实现 logback-core.jar logback核心包 logback-classic.jar 同时删除原来的commons-logging.jar和log4j.jar mport org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Test { final Logger logger = LoggerFactory.getLogger(Test.class); public void logTest() { // 不再需要log.isDebugalbe(),代码更简洁 logger.debug(”hello {}”, “amsz”); logger.info("hihi{}","hhhh"); } } 再看看logback.xml的配置: <?xml version="1.0" encoding="UTF-8"?> <configuration> <substitutionProperty name="log.base" value="../logs/hzg" /> <jmxConfigurator /> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern> </layout> </appender> <!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份)--> <appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <Encoding>UTF-8</Encoding> <File>${log.base}.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${log.base}.%d{yyyy-MM-dd}.log.zip</FileNamePattern> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>2MB</MaxFileSize> </triggeringPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern> </layout> </appender>
<!-- 需要记录日志的包 --> <logger name="com.hzg.core"> <level value="WARN" /> </logger> <logger name="com.hzg.test"> <level value="INFO" /> </logger>
<logger name="org.springframework"> <level value="WARN" /> </logger> <logger name="org.hibernate"> <level value="WARN" /> </logger> <logger name="org.hibernate.SQL"> <level value="WARN" /> </logger> <logger name="org.hibernate.cache"> <level value="ERROR" /> </logger> <root> <level value="INFO" /> <appender-ref ref="stdout" /> <appender-ref ref="logfile" /> </root> </configuration> 3、总结: 使用slf4j+logback的优势:
|