1. java.util.logging
JDK自带日志组件,使用方式简单,不需要依赖第三方日志组件。
支持将日志打印到控制台,文件,甚至可以将日志通过网络打印到指定主机。
相对于第三方独立日志框架来说,支持的日志级别比较少,功能也比较单一。
2. apache commons logging
https://commons.apache.org/proper/commons-logging/index.html
Apache Commons Logging简称JCL。
JCL提供了一个轻量级的日志抽象,为应用程序提供统一的日志API。允许用户使用具体的日志实现,如:log4j,Avalon LogKit,java.util.logging。
当然,JCL同时也提供了一个简单的日志实现org.apache.commons.logging.impl.SimpleLog,将日志输出到System.err。
目前JCL已经停止更新了,最新发布版本为1.2 Release - July 2014。
3. log4j
log4j 1.x: http://logging.apache.org/log4j/1.2/manual.html
log4j 2.x: https://logging.apache.org/log4j/2.x/
主流日志框架,2.x版本继续更新,1.x已经停止。建议在应用程序中使用2.x版本。
4. logback
https://logback.qos.ch/
logback是log4j的作者开发一个新的日志组件,原生支持slf4j实现。
官方宣称logback比log4j小巧,且性能更好,支持更多功能。详见:https://logback.qos.ch/reasonsToSwitch.html
5. slf4j
https://www.slf4j.org/
slf4j被设计成一个日志框架,为应用程序提供日志API,具体的日志实现可以交给log4j,java.util.logging,logback。
当然,slf4j本身也提供了一个简单的日志实现Slf4jSimple,但是只能输出INFO及以上级别的日志到System.err。
总结:
1. apache commons logging组件和slf4j都是日志抽象框架,为应用程序提供统一的日志操作API,支持多种日志实现,如:log4j。但是目前apache commons logging已经停止更新,活跃度并没有slf4j高,不建议使用。
2. logback作为slf4j的原生实现,所以理论上最佳的日志组件组合是:slf4j + logback。
3. slf4j提供了统一的日志API,将具体的日志实现交给其他日志框架,这带来了很大的灵活性。应该尽量在应用程序中使用slf4j并集成具体的日志实现框架实现日志功能。