`
ihyperwin
  • 浏览: 426673 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

logback@ slf4j@ jcl-over-slf4@ log4j-over-slf4j

 
阅读更多

    Java 界里有许多实现日志功能的工具,最早得到广泛使用的是 log4j,许多应用程序的日志部分都交给了 log4j,不过作为组件开发者,他们希望自己的组件不要紧紧依赖某一个工具,毕竟在同一个时候还有很多其他很多日志工具,假如一个应用程序用到了两个组 件,恰好两个组件使用不同的日志工具,那么应用程序就会有两份日志输出了。

 
为了解决这个问题,Apache Commons Logging (之前叫 Jakarta Commons Logging,JCL)粉墨登场,JCL 只提供 log 接口,具体的实现则在运行时动态寻找。这样一来组件开发者只需要针对 JCL 接口开发,而调用组件的应用程序则可以在运行时搭配自己喜好的日志实践工具。
 
所以即使到现在你仍会看到很多程序应用 JCL + log4j 这种搭配,不过当程序规模越来越庞大时,JCL的动态绑定并不是总能成功,具体原因大家可以 Google 一下,这里就不再赘述了。解决方法之一就是在程序部署时静态绑定指定的日志工具,这就是 SLF4J 产生的原因。
 
跟 JCL 一样,SLF4J 也是只提供 log 接口,具体的实现是在打包应用程序时所放入的绑定器(名字为 slf4j-XXX-version.jar)来决定,XXX 可以是 log4j12, jdk14, jcl, nop 等,他们实现了跟具体日志工具(比如 log4j)的绑定及代理工作。举个例子:如果一个程序希望用 log4j 日志工具,那么程序只需针对 slf4j-api 接口编程,然后在打包时再放入 slf4j-log4j12-version.jar 和 log4j.jar 就可以了。
 
现在还有一个问题,假如你正在开发应用程序所调用的组件当中已经使用了 JCL 的,还有一些组建可能直接调用了 java.util.logging,这时你需要一个桥接器(名字为 XXX-over-slf4j.jar)把他们的日志输出重定向到 SLF4J,所谓的桥接器就是一个假的日志实现工具,比如当你把 jcl-over-slf4j.jar 放到 CLASS_PATH 时,即使某个组件原本是通过 JCL 输出日志的,现在却会被 jcl-over-slf4j “骗到”SLF4J 里,然后 SLF4J 又会根据绑定器把日志交给具体的日志实现工具。过程如下
 
Component
   |
   | log to Apache Commons Logging
   V
 jcl-over-slf4j.jar --- (redirect) ---> SLF4j ---> slf4j-log4j12-version.jar ---> log4j.jar ---> 输出日志
 
看到上面的流程图可能会发现一个有趣的问题,假如在 CLASS_PATH 里同时放置 log4j-over-slf4j.jar 和 slf4j-log4j12-version.jar 会发生什么情况呢?没错,日志会被踢来踢去,最终进入死循环。
 
所以使用 SLF4J 的比较典型搭配就是把 slf4j-api、JCL 桥接器、java.util.logging(JUL)桥接器、log4j 绑定器、log4j 这5个 jar 放置在 CLASS_PATH 里。
 
不过并不是所有APP容器都是使用 log4j 的,比如 Google AppEngine 它使用的是 java.util.logging(JUL),这时应用 SLF4J 的搭配就变成 slf4j-api、JCL桥接器、logj4桥接器、JUL绑定器这4个 jar 放置在 WEB-INF/lib 里。

 

 

 

Logback 先找 logback-test.xml ,没有则找 logback.xml 文件,都找不到就使用 BasicConfigurator 基本配置,BasicConfigurator 就是相当于等会贴出的 logback.xml 文件内容的配置。这里我们用 logback.xml 配置文件,以前的 log4j.properties  文件可以用 PropertiesTranslator 转换成 logback.xml 文件内容。

主配置文件为logback.xml ,放在src 目录下或是WEB-INF/classes 下,logback 会自动加载

下面是一个最简单的 logback.xml 文件内容

01

02

03

04

05

06

07

08

09

10

11

  

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

  <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">

      <encoder charset="GBK">

          <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>

      </encoder>

  </appender>   

  <root level="DEBUG">

    <appender-ref ref ="stdout" />

  </root>

</configuration>  

使用 Logback   的代码   

01

02

03

04

05

06

07

08

09

10

11

12

package com.unmi;

 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

public class TestLogback {

    private static final Logger logger = LoggerFactory.getLogger(TestLogback.class);

 

    public static void main(String[] args) {

        logger.info("Hello {}","TestLogback");

    }

}

可以看到与使用 SLF4J 的代码没有任何区别,因为本来用的通用日志框架就是 SLF4J ,说到底,这里的 Logback 就相当于 SLF4J+Log4J 使用方式中的 Log4J 绑定和 Log4J 的功能。

                                                                                         log4j.xml 能做的配置, logback.xml 中也能做到,而且还增强了诸如 <if><then><else> <filter> < sift > 等更强的控制,请参考 logback 的手册 http://logback.qos.ch/manual/index.html

                                                               

如之前有 log4j ,想用 log4j logback 共存:   则需                       jcl-over-slf4j-xx.jar  

commons-logging (spring struts2 框架要用到)

logback-classic-x.xjar

logback-core-xx.jar

slf4j-api-xx.jar  

log4j-over-slf4j-xx.jar

如全新项目,则推荐只用 logback, 只需以下 jar

logback-classic-1.0.0.jar

logback-core-1.0.0.jar

slf4j-api-1.6.4.jar

jcl-over-slf4j-1.6.4.jar  

commons-logging spring struts2 框架要用到)

如果用 slf4j+log4j 则以下 jar:

slf4j-api-1.6.4.jar

slf4j-logj12.jar slf4j log4j 之间的绑定)

log4j.jar

 

SLF4J 在使用其他日志实现框架的时候都是 SLF4J+ 相应绑定+ 日志实现,这里缩写成的 SLF4J+Log4J ,中间是有一个 SLF4J Log4J 的绑定的。完整表述它们就是:

SLF4J+Log4J 的方式:     slf4j-api-1.5.11.jar + slf4j-log4j12-1.5.11.jar + log4j-1.2.15.jar
SLF4J+Logback
的方式:slf4j-api-1.5.11.jar + logback-classic-0.9.20.jar + logback-classic-0.9.20     前一个 logback-classic-0.9.20.jar 是作为绑定用的,后一个是作为日志实现用的,也就是 logback-classic-0.9.20.jar 把前面的 slf4j-log4j12-1.5.11.jar log4j-1.2.15.jar  两个包的功能揉合在了一起。

搞明白了 Logback 在其中所担当的角色后,我们就知道,说使用了 Logback 应用组件,实际它们所用的统一日志组件只是 SLF4J 。也可以说 Logback 就是 Log4J 那样,只是自身带了绑定的日志实现。

log4j 配置文件也会自动加载  只要默认名为log4j.properties/log4j.xml 且放在src 目录下,都可以自动加载配置文件

logger.debug ("param: order. < " + getParameter(order) + " >"); log4j 中,先拼接字符串,再进行判断,当前的日志输出策略是否允许输出debug 信息,如允许,则输出, 不允许,则放弃      性能不太好,容易造成拼接了大量字符串,而最后放弃,严重影响程序速度。

     if ( logger .isDebugEnabled()) {

            logger .debug( "param: order. < " + getParameter(order) + " >" );

        }

这样写,如果不允许 debug 时(级别为 info 时)   ,则不进行字符串拼接。。但是,如果允许 debug ,则会判断两次,一次在 logger .isDebugEnabled() ,一次在 logger .debug ,这样也会影响性能。

logback     

logger .debug( "hello,{}" , "slf4j_debug" );

logger .info( "hello,{}" , "slf4j_info" );  

则将字符串拼接延后,先判断 debug 是否可用,再进行拼接,提高了效率和运行速度。

Logback 加载配置文件顺序及截图:

关于个别包的日志级别的调整(个性化)如图:默认的包会启用 INFO 级别,设置后, com.logback.error 包的日志级别为 error ,其中 info debug 级别日志不打印。 com.logback.debug 包的日志级别为 debug ,其中 debug 及其以上级别会打出,而默认只会打出 INFO 级别信息, 此可以追踪异常,而只需调整一部分日志级别,不影响整体。



 

 

  • 大小: 219.8 KB
  • 大小: 12 KB
分享到:
评论

相关推荐

    slf4j-1.6.1+logback-0.9.24.rar

    jcl-over-slf4j-1.6.1.jar log4j-1.2.8.jar logback-access-0.9.24.jar logback-classic-0.9.24.jar logback-core-0.9.24.jar servlet-api.jar slf4j-1.6.1+logback-0.9.24.rar slf4j-api-1.6.1.jar

    log4j-1.2.17.jar、logback-core-1.1.2.jar、slf4j-simple-1.7.12.jar等

    commons-logging-1.2.jar、log4j-1.2.17.jar、logback-classic-1.1.2.jar、logback-core-1.1.2.jar、slf4j-api-1.7.12.jar、slf4j-jcl-1.7.12.jar、slf4j-simple-1.7.12.jar

    log4j logback slf4j

    NULL 博文链接:https://tristan-s.iteye.com/blog/1966020

    快速了解常用日志技术(JCL、Slf4j、JUL、Log4j、Logback、Log4j2)-附件资源

    快速了解常用日志技术(JCL、Slf4j、JUL、Log4j、Logback、Log4j2)-附件资源

    考试系统源码java-org.ops4j.pax.logging:OSGi日志框架实现。支持SLF4J、LOG4J、JCL等

    SLF4J 或 Commons-Logging。 日志 API本身不做任何日志,而是需要特定的日志实现(和相关配置)和日志实现本身之间应该有区别。 与上述区别相匹配的日志 API(或Facades )包括: 日志实现始终提供自己的API,并且...

    基于Java日志平台的访问链路追踪实战(1.01G)

    ---10-slf4j与其他日志的配合与总结.mp4 ---11-log4j2的配置与日志发展历程总结.mp4 ---12-日志组件配置概述.mp4 ---13-jul配置文件与级别.mp4 ---14-jul打印级别与其他配置项.mp4 ---15-log4j配置文件与配置项.mp4 ...

    基于Java日志平台的访问链路追踪实战(1.34G)

    ---10-slf4j与其他日志的配合与总结.mp4 ---11-log4j2的配置与日志发展历程总结.mp4 ---12-日志组件配置概述.mp4 ---13-jul配置文件与级别.mp4 ---14-jul打印级别与其他配置项.mp4 ---15-log4j配置文件与配置项.mp4 ...

    日志框架总结JUL、Log4j、Log4j2、Logback以及门面技术

    日志框架与日志门面的区别 日志框架技术 JUL 使用 Log4j 组件 使用 Logback 由Log4j之父做的另一个开源项目,业界中称作logj后浪,一个可靠、同样且灵活的java日志框架。 Logback组件 ...SLF4j 使用

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

    SLF4J "日志门面的使用 日志的绑定 日志的桥接 日志门面的原理" log-back "log-back的日志框架 log-back的配置 logback记录tomcat的访问日志" log4j2 "log4j2的日志框架 log4j2的配置 异步日志的使用" spring整合log...

    SpringBoot日记——日志框架篇.docx

    在项目的开发中,日志是必不可少的...而市面上常见的日志框架有很多,比如:JCL、SLF4J、Jboss-logging、jUL、log4j、log4j2、logback等等,我们该如何选择呢? 通常情况下,日志是由一个抽象层+实现层的组合来搭建的。

    开发用jar包合集

    log4j-over-slf4j-1.7.7.jar logback-classic-1.0.13.jar logback-core-1.0.13.jar maven-ant-tasks-2.1.3.jar minlog-1.2.jar native-platform-0.10.jar native-platform-freebsd-amd64-0.10.jar native-...

    Java日志体系全解析:架构师必掌握的关键技术和最佳实践

    它不仅提供了一个更为简洁高效的日志门面,还通过各种适配器支持了众多日志实现,如log4j、logback等。SLF4J通过解耦日志API和具体实现,提高了程序的灵活性和可维护性。 Spring框架在其不同版本中使用了不同的日志...

    谈谈你了解的springboot日志框架

    到现在为止呢,已经有很多日志可供选择了,而市面上常见的日志框架有很多,比如: JCL 、 SLF4J 、 Jboss-logging 、 jUL(Java Util Logging) 、 log4j 、 log4j2 、 logback 等等,我们该如何选择呢?

    java日志框架视频教程

    视频详细讲解,需要的小伙伴自行网盘下载,链接见附件,... logback-access使用章节七:Log4j21. 快速入门2. 配置文件3. 异步日志4. 性能介绍章节八:SpringBoot使用日志1. springBoot日志设计2. springBoot日志使用

    Java日志框架

    眼下java应用日志收集都是採用日志框架(slf4j、apache commonslogging)+日志系统(log4j、log4j2、LogBack、JUL等)的方式。...SLF4j:提供新的API,初衷是配合Logback使用,但同一时候兼容Log4j。

    sofa-common-tools:Sofa-common-tools是一个向其他SOFA库提供一些实用程序功能的库

    背景在日常开发中,Java日志记录通常包括选择日志外观(例如JCL和SLF4j)和日志实现(例如Log4j2和logback)。 假设您正在开发使用JAR的应用程序,该JAR利用log4j2进行日志记录。 在这种情况下,您不能选择log4j2...

    springboot-learn-jdbc.zip

    │ Maven__org_apache_logging_log4j_log4j_to_slf4j_2_12_1.xml │ Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_33.xml │ Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_33.xml │ Maven__...

    enterprise-spring-best-practices:企业Spring最佳实践

    企业Spring最佳实践 博客系列“ Enterprise Spring最佳实践”的代码伴侣站点 ...SLF4J和Logback配置 Apache Commons(又名Jakarta Commons / JCL) Java Util(又名JUL) System.out和System.err 资源

Global site tag (gtag.js) - Google Analytics