日志

http://logging.apache.org/log4j/2.x/maven-artifacts.html

日志接口库

common-logging

common-logging为众多具体的日志实现库提供了一个统一的接口。它允许在运行时绑定到任意的日志库。但由于它使用了ClassLoader寻找和载入底层的日志库,这导致像OSGi这样的框架无法正常工作,由于其不同的插件使用自己的ClassLoader。 OSGi的这种机制保证了插件互相独立,然而却使Apache Common-Logging无法工作。

详细参考:http://commons.apache.org/proper/commons-logging/

slf4j

即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样 的日志系统,允许最终用户在部署其应用时使用其所希望的日志系统。

实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。

详细参考:http://www.slf4j.org/

common-logging与slf4j相比

common-logging在运行时通过动态查找机制自动找出真正使用的日志库,而sflfj则是在部署的时候就确定了所使用的日志库。目前slf4j用得更多一些。

 在使用Commons Logging时,我们经常会看到以下方法的写法:

if (logger.isDebugEnabled()) {

    logger.info("Loading XML bean definitions from " + encodedResource.getResource());

}

存在isDebugEnabled()的判断逻辑是为了在避免多余的字符串拼接,即如果不存在isDebugEnabled()判断,即使当前日志级别为ERROR时,在遇到logger.info()调用时,它还会先拼接日志消息的字符串,然后进入该方法内,才发现这个日志语句不用打印。而这种多余的拼接不仅浪费了多余的CPU操作,而且会增加GC的负担。SLF4J则提供以下的方式来解决这个问题:

logger.info("Loading XML bean definitions from {}", encodedResource.getResource());

日志实现库

java.util.logging

Java1.4及以上版本中自带的日志库实现。与log4j相比,功能要少一些。

Log4j

Log4j是Apache下的一个功能非常丰富的Java日志库实现。通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等;用户也可以控制每一条日志的输出格式;它有两个主要版本,1.2和2.x。2.x在1.x基础上做了很多改进,吸收了Logback中的很多优点,而且解决了Logback中存在的一些问题。

详细参考:http://logging.apache.org/log4j/1.2/http://logging.apache.org/log4j/2.x/

Logback

Logback是作为Log4j的替代者出现的,在很多方面相比Log4j更优秀。作者还专门撰文描述为什么要从Log4j迁移到Logback,参见:http://logback.qos.ch/reasonsToSwitch.html

详细参考:http://logback.qos.ch/ 

Log4j与Logback相比

Logback与Log4j1.x相比,在各个方面都要更好,在它们之间选择肯定选Logback。但因为Log4j2.x的重大改进,在Log4j2.x和Logback之间的选择我还没来得及仔细分析和比较,暂时留个疑问,后面分析了再补上。不过对于一般的J2EE应用没有太大的区别。

参考资料:

1.  http://liuzidong.iteye.com/blog/776072   Java日志框架:SLF4J, Apache Common-Logging, Log4J和Logback

2.  http://www.blogjava.net/lhulcn618/articles/16996.html Log4j 对比 java.util.logging

3.  http://www.cnblogs.com/Leo_wl/p/3417215.html  Log4j、Log4j 2、Logback、SFL4J、JUL、JCL的比较

=========

补充资料:

log4j和log4j2区别:

http://blog.csdn.net/fangaohua200/article/details/53561718

猜你喜欢

转载自my.oschina.net/u/2983845/blog/784189