`
zy19982004
  • 浏览: 663381 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:252313
社区版块
存档分类
最新评论

Java日志学习六:各种日志系统间的桥接

 
阅读更多

一.四种日志系统

  1. JCL http://zy19982004.iteye.com/blog/1991328
  2. Apache Log4j http://zy19982004.iteye.com/blog/1992939
  3. Slf4j http://zy19982004.iteye.com/blog/1993059
  4. JDK Logger http://zy19982004.iteye.com/blog/1993209

二.为什么会有桥接

     除了JDK Logger是一个纯粹的日志实现之外,其它三个日志系统都是api+impl的形式。每个人都想去做门面,让别的厂商做实现。结果呢,做是做到了。但相比JDBC由sun提供的一套接口,日志系统显得极为混乱。有多少人知道自己的Logger LOG = XX.getLogger(class)到底是哪个Logger?有多少系统里混合着几种日志系统?本文将一一为你解答。

<!--JCL-->
<dependency>   
	<groupId>commons-logging</groupId>    
	<artifactId>commons-logging-api</artifactId>    
	<version>1.1</version>    
</dependency> 
<dependency>  
	<groupId>commons-logging</groupId>   
	<artifactId>commons-logging</artifactId>   
	<version>1.1.1</version>   
</dependency>

<!--Log4j-->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-api</artifactId>
	<version>2.0-beta9</version>
</dependency>
<dependency>
	<groupId>log4j</groupId>
	<artifactId>log4j</artifactId>
	<version>1.2.17</version>
</dependency>

<!--Slf4j-->
<dependency> 
	<groupId>org.slf4j</groupId> 
	<artifactId>slf4j-api</artifactId> 
	<version>1.7.5</version> 
</dependency> 
<dependency> 
	<groupId>org.slf4j</groupId> 
	<artifactId>slf4j-simple</artifactId> 
	<version>1.7.5</version> 
</dependency>

 

三.使用JDK Logger

      这个比较简单,pom里什么都不用做,代码里Logger logger = Logger.getLogger(JavaLoggerTest.class.getName())即可。

 

四.使用JCL做门面,其它日志系统做实现(含JCL自身实现)

     http://zy19982004.iteye.com/blog/1991328已经将了JCL寻找日志实现的方式。

  1. JCL做门面,JCL做实现:pom里只需
    <dependency>  
    	<groupId>commons-logging</groupId>   
    	<artifactId>commons-logging</artifactId>   
    	<version>1.1.1</version>   
    </dependency>
    
    
     
  2. JCL做门面,Log4j做实现,也好说,因为JCL和Log4j都是Apache自家的东西,所以JCL api里已经预留了Log4j的实现,我们只需要把Log4j加到系统里即可,pom如下。为什么是commons-logging不是commons-logging-api也请参考http://zy19982004.iteye.com/blog/1991328
    <dependency>  
    	<groupId>commons-logging</groupId>   
    	<artifactId>commons-logging</artifactId>   
    	<version>1.1.1</version>   
    </dependency>
    <dependency>
    	<groupId>log4j</groupId>
    	<artifactId>log4j</artifactId>
    	<version>1.2.17</version>
    </dependency>
     
  3. JCL做门面,Slf4j做实现。可惜的是,JCL并没有内置Slf4j的实现,只能通过service机制,Slf4j里定义一个org.apache.commons.logging.LogFactory的实现类。jcl-over-slf4j就是桥接器,SLF4JLog实现JCL的Log接口,由Slf4j的Logger去实现;SLF4JLogFactory实现JCL的LogFactory,由Slf4j的LoggerFactory去实现。所以jcl-over-slf4j依赖slf4j-api。剩下的就是Slf4j决定采用哪种实现了,比喻slf4j-simple。最后pom文件如下。
    <dependency>   
    	<groupId>commons-logging</groupId>    
    	<artifactId>commons-logging-api</artifactId>    
    	<version>1.1</version>    
    </dependency>
    <dependency>  
    	<groupId>org.slf4j</groupId>  
    	<artifactId>jcl-over-slf4j</artifactId>  
    	<version>1.7.5</version>  
    </dependency>
    
    //可定制
    <dependency> 
    	<groupId>org.slf4j</groupId> 
    	<artifactId>slf4j-simple</artifactId> 
    	<version>1.7.5</version> 
    </dependency> 
       
  4. JCL做门面,JDK Logger做实现。只需加入commons-logging-api即可。pom如下
    <dependency>   
    	<groupId>commons-logging</groupId>    
    	<artifactId>commons-logging-api</artifactId>    
    	<version>1.1</version>    
    </dependency> 
     

 

五.使用Slf4j做门面,其它日志系统做实现(含Slf4j自身实现)

  1. Slf4j做门面,自身做实现。只需加入slf-api和slf-simple即可。pom如下
    <dependency> 
    	<groupId>org.slf4j</groupId> 
    	<artifactId>slf4j-api</artifactId> 
    	<version>1.7.5</version> 
    </dependency> 
    <dependency> 
    	<groupId>org.slf4j</groupId> 
    	<artifactId>slf4j-simple</artifactId> 
    	<version>1.7.5</version> 
    </dependency>
     
  2. Slf4j做门面,JCL做实现。需要slf4j-jcl做桥接器,slf4j-jcl已经依赖commons-logging了,所以我们不需要了。需要注意的是jcl-over-slf4j和slf4j-jcl不能同时出现在系统里,slf4j会检查这种循环调用最后抛出Detected both jcl-over-slf4j.jar AND slf4j-jcl.jar on the class path。这几种日志系统的桥接器在一起还有有其它的循环,使用时注意就行了。最后pom如下
    <dependency> 
    	<groupId>org.slf4j</groupId> 
    	<artifactId>slf4j-api</artifactId> 
    	<version>1.7.5</version> 
    </dependency> 
    <dependency>  
    	<groupId>org.slf4j</groupId>  
    	<artifactId>slf4j-jcl</artifactId>  
    	<version>1.7.5</version>  
    </dependency>  
     
  3. Slf4j做门面,Log4j做实现。和上面一个道理。需要桥接器slf4j-log4j12。http://zy19982004.iteye.com/blog/1993059 里已经将到了slf4j-log4j12是怎么工作的,因为slf4j-log4j12 pom里已经依赖log4j,所以我们不需要了。最后pom如下
    <dependency> 
    	<groupId>org.slf4j</groupId> 
    	<artifactId>slf4j-api</artifactId> 
    	<version>1.7.5</version> 
    </dependency> 
    
    <dependency>  
    	<groupId>org.slf4j</groupId>  
    	<artifactId>slf4j-log4j12</artifactId>  
    	<version>1.7.5</version>  
    </dependency> 
     
  4. Slf4j做门面,JDK Logger做实现。好像没有发现这个桥接器,写起来也简单,参考http://zy19982004.iteye.com/blog/1993059定义自己的日志实现。

六.使用Log4j做门面,其它日志系统做实现(含Log4j自身实现)

 

      相比JCL做门面,动态查找实现和Slf4j做门面,静态绑定实现,Log4j的门面,其它日志做实现,相关桥接器的代码我没细过,大概扫了一眼,只是纯粹意义上的接口和实现的关系。包装一下别人的东西,没撒意思。

  1.  Log4j做门面,Log4j做实现。只需要log4j,pom如下
    <dependency>
    	<groupId>log4j</groupId>
    	<artifactId>log4j</artifactId>
    	<version>1.2.17</version>
    </dependency>
     
  2. Log4j做门面,JCL做实现。使用log4j-jcl做桥接器。log4j-jcl已经依赖log4j-api和commons-logging,所以我们不需要了,pom如下
     <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-jcl</artifactId>
        <version>2.0-beta9</version>
     </dependency>
     
  3. Log4j做门面,Slf4j做实现。log4j-to-slf4j已经依赖log4j-api和slf4j-api,我们不再需要了。pom如下
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-to-slf4j</artifactId>
        <version>2.0-beta9</version>
     </dependency>
    <dependency> 
    	<groupId>org.slf4j</groupId> 
    	<artifactId>slf4j-simple</artifactId> 
    	<version>1.7.5</version> 
    </dependency>
     
  4. Log4j做门面,JDK Logger做实现。没有发现这个桥接器,也没必要。 

 

 

1
0
分享到:
评论

相关推荐

    php调用java,不是http桥接

    - 查看JavaBridge日志文件是否有错误信息。 #### 五、总结 本文详细介绍了如何使用JavaBridge实现PHP调用Java的方法。通过这种方式,开发者能够在PHP应用中无缝集成Java组件,提高程序的灵活性和扩展性。需要注意...

    java代码实例-日志规范史上最全java日志攻略(附教程)

    日志框架 JAVA中现有的日志框架 JUL "JUL入门使用 日志的级别 Appender的介绍 日志的布局和格式" Log4J "Log4J的入门使用 Log4j的配置 输出日志文件 将日志信息存入数据库" Apache JCL "common log介绍 log中的接口...

    日志工具类-java实现

    在Java编程中,日志工具类的实现是一个非常重要的部分,尤其在开发复杂项目时,良好的日志系统能够帮助开发者追踪程序运行状态、定位错误、分析性能等。本篇文章将详细探讨如何创建一个自定义的日志工具类,以便在...

    java日志框架视频教程

    桥接旧日志实现4. 原理解析章节六:Logback1. 快速入门2. 配置文件3. logback-access使用章节七:Log4j21. 快速入门2. 配置文件3. 异步日志4. 性能介绍章节八:SpringBoot使用日志1. springBoot日志设计2. ...

    混乱的 Java 日志体系 - ImportNew1

    ### 混乱的Java日志体系概览 在Java开发领域中,日志系统扮演着极其重要的角色,它不仅帮助开发者追踪应用的行为,还能在生产环境中定位问题所在。...希望本文能够帮助开发者更好地理解和利用Java日志系统。

    JAVA桥接模式.doc

    在Java中,桥接模式通常用于处理类的膨胀问题,特别是当有多个维度的分类或者组合时,避免过度的类数量爆炸。 在描述中提到的场景是一个Photoshop图形工具的例子,其中有各种形状(如星星、方形、圆形)和多种颜色...

    JAVA应用开发日志解决方案

    对于遗留系统来说,SLF4J提供了桥接机制,可以在不修改原有代码的情况下,将原有的日志实现转换为SLF4J。例如,可以通过添加`slf4j-jcl.jar`来让SLF4J与JCL兼容。 #### 5. 未结与已结问题 在使用这些日志框架的...

    java_use_dll.rar_JAVA 调用DLL_java_use_dll.rar_系统日志

    本文将深入探讨如何在Java中调用DLL(动态链接库)以及如何获取系统日志。 首先,Java调用DLL主要依赖于第三方库,如Jacob项目。Jacob是一个Java到COM桥接库,它提供了在Java中调用COM组件和DLL函数的能力。在这个...

    NLOG 日志 开源组件 Visual Studio java

    对于Java开发者,虽然NLOG主要面向.NET,但有一些第三方库如JNLog提供了桥接,使得NLOG可以用于Java项目。这样,Java开发者也能享受到NLOG的特性,如灵活的配置和丰富的日志处理器。 在实际应用中,NLOG的优势在于...

    java日志组件的那些破事_.docx

    总之,Java日志组件的选择和配置是一项重要的任务,它涉及到系统的可维护性和稳定性。SLF4J提供了一种灵活的方式来整合不同的日志框架,使得开发者可以根据项目需求选择最适合的日志实现,并且在与遗留日志框架的...

    Java日志组件间关系详解

    Java日志组件是Java开发中不可或缺的部分,它们用于记录应用程序的运行信息,帮助开发者调试、追踪错误和监控系统状态。本文将深入解析Java日志组件之间的关系,以便于理解和选择适合的日志解决方案。 首先,我们要...

    JAVA设计模式.pdf

    学习GOF设计模式对于提升软件开发者的技能至关重要,它不仅能够帮助开发者写出更加灵活、易于维护的代码,还能提高团队间的协作效率。 #### 二、设计模式在JAVA中的应用 ##### 1. 创建型模式 **(1)工厂模式...

    设计模式JAVA(学习java模式的一本好书)

    ### 设计模式JAVA(学习java模式的一本好书) #### 学习设计模式的重要性 设计模式作为面向对象编程中的一项重要技术,对于提高代码的可维护性、可扩展性和复用性具有重大意义。GoF(Gang of Four)的《设计模式》...

    java集成webkit浏览器

    具体实现过程中,Java开发者会使用如DJNativeSwing这样的第三方库,它提供了一个桥接机制,使得Java可以直接调用WebKit的C/C++接口。DJNativeSwing-SWT.jar是这个库的一部分,专门用于在SWT应用中集成WebKit。...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    关于java程序员发展需要学习的路线整理集合 技术 应用技术 计算机基础知识 cpu mem disk net 线程,进程 第三方库 poi Jsoup zxing Gson 数据结构 树 栈 链表 队列 图 操作系统 linux 代码控制...

    java源码:Java-COM中间件 JACOB.zip

    - 处理结果:返回值通常为 Variant 类型,可以转换为Java中的各种数据类型。 3. **示例代码** - 创建Excel应用程序: ```java import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Variant; ...

    基于Java的火车售票系统设计源码

    本项目是一个基于Java技术实现的火车售票系统,旨在提供一个完整的个人项目实例,适用于学习和教育平台上的代码实践。该系统涵盖了从用户界面到后台处理的一系列功能,包括火车票的预订、查询以及退票等操作。以下是...

    Struts2、Spring、Mybatis日志jar包

    Mybatis是一个轻量级的持久层框架,它的日志系统依赖于SLF4J(Simple Logging Facade for Java),这是一个日志门面,可以与各种日志实现(如Logback、Log4j等)配合使用。在Mybatis的配置文件`mybatis-config.xml`...

    shiro需要的Jar含日志包

    在 Java 开发中,日志系统是非常关键的部分,它可以帮助开发者追踪程序运行状态、调试错误以及监控应用性能。Shiro 自身并不包含完整的日志实现,而是依赖于外部的日志库,如 Log4j、Logback 或者 Java 的内置日志...

    基于Java的Rails3消息队列系统 Sidekiq.zip

    而Java通常使用如RabbitMQ、Apache Kafka或ActiveMQ等消息队列系统,但要集成Rails的Sidekiq,我们需要一个桥接方案。 描述中提到的Sidekiq.zip可能包含了一个Sidekiq的源码版本或者是Java环境下的实现或适配器,...

Global site tag (gtag.js) - Google Analytics