Java常用日志框架了解

来源:互联网 发布:unity3d itween 编辑:程序博客网 时间:2024/05/17 04:58

一、常用的日志框架
jdk自带的logging,log4j1、log4j2、logback.
常用于实现日志统一的框架apache的commons-logging、slf4j.


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/

Log4j 2
Log4j 2.0引入了新的插件系统、对properties的支持、对基于 JSON配置的支持和配置的自动化重载。它支持很多已有的日志框架,包括SLF4J、Commons Logging、Apache Flum、Log4j 1.x,并提供了新的程序员API。

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

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提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。
Logging API实现既可以选择直接实现SLF4J接的loging APIs如: NLOG4J、SimpleLogger。也可以通过SLF4J提供的API实现来开发相应的适配器如Log4jLoggerAdapter、JDK14LoggerAdapter。
详细参考:http://www.slf4j.org/

二、各框架包含的模块
log4j1:

        log4j:log4j1的全部内容

log4j2:

    log4j-api:log4j2定义的API    log4j-core:log4j2上述API的实现

logback:

    logback-core:logback的核心包, 是另外两个组件的基础    logback-classic: 实现了Slf4j的API,所以当想配合Slf4j使用时,需要将logback-classic加入classpath.    logback-access: 是为了集成Servlet环境而准备的,可提供HTTP-access的日志接口;

commons-logging:

    commons-logging:commons-logging的原生全部内容    log4j-jcl:commons-logging到log4j2的桥梁    jcl-over-slf4j:commons-logging到slf4j的桥梁

三、日志框架的集成
1. slf4j转向某个实际的日志框架:
如,使用slf4j的API进行编程,底层想使用log4j1来进行实际的日志输出,这就是slf4j-log4j12干的事。

    slf4j-jdk14:slf4j到jdk-logging的桥梁    slf4j-log4j12:slf4j到log4j1的桥梁    log4j-slf4j-impl:slf4j到log4j2的桥梁    logback-classic:slf4j到logback的桥梁    slf4j-jcl:slf4j到commons-logging的桥梁

2. 某个实际的日志框架转向slf4j:
如,使用log4j1的API进行编程,但是想最终通过logback来进行输出,所以就需要先将log4j1的日志输出转交给slf4j来输出,slf4j再交给logback来输出。将log4j1的输出转给slf4j,这就是log4j-over-slf4j做的事

    这一部分主要用来进行实际的日志框架之间的切换    jul-to-slf4j:jdk-logging到slf4j的桥梁    log4j-over-slf4j:log4j1到slf4j的桥梁    jcl-over-slf4j:commons-logging到slf4j的桥梁

3. commons-logging与其他日志框架集成,及需要的jar包

commons-logging与jdk-logging集成:commons-logging.commons-logging与log4j1集成:commons-logging、log4j.commons-logging与logback集成:logback-core、logback-classic、slf4j-api、jcl-over-slf4j(2个集成包,可以不再需要commons-logging).commons-logging与slf4j集成:slf4j-api、jcl-over-slf4j(集成包,不再需要commons-logging).

4. slf4j与其他日志框架集成,及需要的jar包

    slf4j与jdk-logging集成:slf4j-api、slf4j-jdk14(集成包).    slf4j与log4j1集成:slf4j-api、log4j、slf4j-log4j12(集成包).    slf4j与log4j2集成:slf4j-api、log4j-api、log4j-core、log4j-slf4j-impl(集成包).    slf4j与logback集成:slf4j-api、logback-core、logback-classic(集成包).    slf4j与commons-logging集成:slf4j-api、commons-logging、slf4j-jcl(集成包).

四、参考资料

java日志组件介绍: http://lib.csdn.net/article/java/5637
Java日志框架研究及常见配置 https://my.oschina.net/u/658500/blog/517066
JDK Logging深入分析 http://blog.csdn.net/qingkangxu/article/details/7514770#
jdk-logging、log4j、logback日志介绍及原理 https://my.oschina.net/pingpangkuangmo/blog/406618
Log4j2架构及概念简介: http://www.cnblogs.com/elaron/archive/2013/01/14/2860259.html

0 0