`
atell
  • 浏览: 158359 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

[Java基础]slf4j和common-logging日志系统的原理

阅读更多

官网:http://slf4j.org/index.html,http://slf4j.org/manual.html#binding

The Simple Logging Facade for Java or (SLF4J) serves as a simple facade or abstraction for various logging frameworks, e.g. java.util.logging, log4j and logback, allowing the end user to plug in the desired logging framework at deployment time.

 

 

    slf4j可以说只是一个壳,使用外观模式,底层的具体log系统可以是“Log4j和java.util.logging,JCL,NOP,simple”。具体使用时,您的代码(特别适合用于您的代码将作为第三方的jar包供别人使用)中,直接使用slf4j-api-1.6.1.jar。

 

    而在别人使用您的jar包时,如果他们的日志系统是Log4j或ava.util.logging则他们将在classpath路径中添加slf4j-log4j12-1.6.1.jar或slf4j-jdk14-1.6.1.jar,这样,您的代码的日志就可以和他们使用的日志系统融合一体了。

 

    具体看log4j12-1.6.1.jar或slf4j-jdk14-1.6.1.jar,是这样简单的几个类:


JCL,Log4j和JDK14都分别有自己的个性的Adapter和Factory,而StaticLoggerBinder等3个类则都是一样的,都是org.slf4j.impl.*。

可想而知,这3个bind的jar,都含有具体的实现类,只能使用其中一个jar。

 

 原理介绍--静态绑定
        大家看到要使用哪种日志系统,只需要将对应的日志系统所需要的jar包文件(包括slf4j提供的jar包和日志系统自身依赖 的jar包,例如:slf4j-log4j12-1.5.10.jar和log4j.1.2.jar)放入classpath即可,slf4j可以自动探 测具体使用哪种日志系统,这种技术被称为静态绑定。
       在实际使用中,我们通过LoggerFactory.getLogger()获得logger,查看LoggerFactory的源代码会发现如下两点,
  • LoggerFactory通过StaticLoggerBinder.getSingleton().getLoggerFactory()获得LogFactory,然后再通过该LogFactory来获取logger的
  • 但是StaticLoggerBinder类并不在slf4j-api-1.5.10.jar中,分析与具体日志系统相关的jar包,会发现每个 jar包都有一个StaticLoggerBinder类的实现(如slf4j-log4j12-1.5.10.jar、slf4j-simple- 1.5.10.jar、slf4j-jdk14-1.5.10.jar均有StaticLoggerBinder类实现),这就很明白了,slf4j在启 动时会动态到classpath中查找StaticLoggerBinder类,找到之后就可以生成对应日志系统的日志文件了。
    这里就有一个问题了,slf4j是如何将自己的通用日志格式转成不同的日志系统的格式的呢?
    我们再分析每个日志系统相关的源代码,会发现不同日志系统包都会有一个Adapter,用来在slf4j和不同日志系统之间做转换。


我在看slf4j-api-1.5.10.jar 时,发现确实没有org.slf4j.impl.*这个包,这个包是在具体的slf4j-log4j12-1.6.1.jar或slf4j-jdk14-1.6.1.jar等中。
而看slf4j-api-1.6.1-sources.jar 时,却看到org.slf4j.impl.*这个包,里面的那3个类都有,只不过都是抛出“throw new UnsupportedOperationException("This code should have never made it into the jar");”,可想而知,只是为了方便slf4j在开发时,能够顺利编译,在打包成jar时,并不会将org.slf4j.impl.*打包到jar中。如果你在具体使用时,只添加slf4j-api-1.5.10.jar,使用时会抛出not class found的错误的,因为找不到org.slf4j.impl下的类。

 

 

 

 

另外:

 

http://blog.csdn.net/hbcui1984/archive/2010/01/05/5138883.aspx

 

Apache Commons Logging 和 slf4j也一样,都是Depends on the underlying framework,不过听说commons logging是按顺序查询具体日志系统,commons logging.jar本身带有所有日志系统的Facade了,无须在使用时再按照具体日志系统添加依赖。

见http://en.wikipedia.org/wiki/Java_logging_framework

  • 大小: 34.2 KB
0
0
分享到:
评论

相关推荐

    log4j-slf4j-impl-2.12.1-API文档-中文版.zip

    标签:apache、logging、log4j、slf4j、impl、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...

    log4j-slf4j-impl-2.17.1-API文档-中英对照版.zip

    标签:apache、logging、log4j、slf4j、impl、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和...

    slf4j-api-1.7.26-API文档-中文版.zip

    标签:slf4j、api、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    log4j-to-slf4j-2.10.0-API文档-中文版.zip

    标签:apache、slf4j、logging、log4j、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...

    slf4j-api-1.6.6-API文档-中英对照版.zip

    标签:slf4j、api、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。...

    log4j-slf4j-impl-2.12.1-API文档-中英对照版.zip

    标签:apache、logging、log4j、slf4j、impl、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和...

    slf4j-1.7.21所有相关jar包

    该压缩包中包含以下内容: 1、jcl-over-slf4j-1.7.21.jar 2、jcl-over-slf4j-1.7.21-sources.jar 3、jul-to-slf4j-1.7.21.jar 4、jul-to-slf4j-1.7.21-sources.jar 5、log4j-over-slf4j-1.7.21.jar 6、log4j-over-...

    slf4j-api-1.7.32-API文档-中英对照版.zip

    标签:slf4j、api、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。...

    slf4j-api-1.8.0-alpha2-API文档-中文版.zip

    标签:slf4j、api、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    log4j-to-slf4j-2.12.1-API文档-中文版.zip

    标签:apache、logging、log4j、slf4j、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...

    slf4j-api-1.6.1-slf4j-nop-1.6.1.rar

    解压文件得到slf4j-api-1.6.1.JAR 和slf4j-nop-1.6.1.JAR文件

    用maven + spring mvc +JDBCTEMPLATE +由Slf4j实现Common-Logging+Log4j的日志控制(数据库用MySQL)

    我用maven + spring mvc +JDBCTEMPLATE + 由Slf4j实现Common-Logging+Log4j的日志控制 (数据库用MySQL)简单编写的注册功能模块 附:项目搭建中的完整步骤和说明

    最新slf4j-1.7.21.zip源码和jar包

    1、jcl-over-slf4j-1.7.21.jar 2、jcl-over-slf4j-1.7.21-sources.jar 3、jul-to-slf4j-1.7.21.jar 4、jul-to-slf4j-1.7.21-sources.jar 5、log4j-over-slf4j-1.7.21.jar 6、log4j-over-slf4j-1.7.21-sources....

    slf4j与commons-logging处理日志

    对应文章介绍[https://blog.csdn.net/tuzongxun/article/details/56495476],使用slf4j与commons-logging处理日志

    log4j-to-slf4j-2.17.1-API文档-中英对照版.zip

    标签:apache、slf4j、logging、log4j、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...

    开发工具 slf4j-api-1.7.22

    开发工具 slf4j-api-1.7.22开发工具 slf4j-api-1.7.22开发工具 slf4j-api-1.7.22开发工具 slf4j-api-1.7.22开发工具 slf4j-api-1.7.22开发工具 slf4j-api-1.7.22开发工具 slf4j-api-1.7.22开发工具 slf4j-api-1.7.22...

    log4j-slf4j-impl-2.17.1-API文档-中文版.zip

    标签:apache、logging、log4j、slf4j、impl、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...

    slf4j-1.6.0全套jar包资源,slf4j-api-1.6.0.jar,slf4j-jdk14-1.6.0.jar...

    slf4j-api-1.6.0.jar,slf4j-jdk14-1.6.0.jar,slf4j-log4j12-1.6.0-rc0.jar,slf4j-nop-1.6.0.jar,slf4j-simple-1.6.0.jar

    jcl-over-slf4j-1.7.25-API文档-中文版.zip

    标签:slf4j、jcl、over、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用...

    log4j-over-slf4j-1.7.33-API文档-中文版.zip

    标签:over、slf4j、log4j、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心...

Global site tag (gtag.js) - Google Analytics