`

SLF4J 的几种实际应用模式--:SLF4J+Log4J 与 SLF4J+LogBack

    博客分类:
  • log
 
阅读更多
SLF4J(Simple Logging Facade for Java) 是一个通用的日志框架,不能何以谓之 Facade(门面),所扮眼的角色相当于 Jakarta Commons Logging。就像 JCL 需要底层的日志实现,如 Log4J、java.util.logging、Simple Logger 等来完成具体的信息输出,事实上基本总是 JCL+Log4J 那么一个绝配。SLF4J 的原旨也是能支持多种下层日志框架实现,但最好的日志实现仍然是 Log4J,所以本篇讲述 SLF4J 的第一种用法 SLF4J+Log4J。

 

 需要的配置文件和组件包,下面三个 jar 文件和一个 properties 文件都是要放在项目的 ClassPath 上。 

1. slf4j-api-1.5.11.jar 
2. slf4j-log4j12-1.5.11.jar 
3. log4j-1.2.15.jar 
4. log4j.properties(也可以是 log4j.xml,本例中用 log4j.propertes)

 

log4j.properties

 

  1. log4j.appender.stdout=org.apache.log4j.ConsoleAppender    
  2. log4j.appender.stdout.Target=System.out    
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout    
  4. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n    
  5. log4j.appender.db=org.apache.log4j.FileAppender    
  6. log4j.appender.db.File=${s2sh.root}/WEB-INF/logs/ssh.log    
  7. log4j.appender.db.Append=true    
  8. log4j.appender.db.layout=org.apache.log4j.PatternLayout    
  9. log4j.appender.db.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n  

 

使用 SLF4J  的代码:

 

 

  1. import org.slf4j.Logger;   
  2. import org.slf4j.LoggerFactory;   
  3.    
  4. public class TestSlf4J {   
  5.     private static final Logger logger = LoggerFactory.getLogger(TestSlf4j.class);   
  6.     public static void main(String[] args) {   
  7.         logger.info("Hello {}","SLF4J");   
  8.     }   
  9. }   

执行它,控制台输出: 

  1. 2010-04-07 17:14:51,390 [com.unmi.TestSlf4j]-[INFO] Hello SLF4J  

 

把这种 SLF4J+Log4J 的使用模式与曾为霸主地位的 JCL+Log4J 的用法进行一下对比(请忽略掉包文件中的版本号): 

 

把这种 SLF4J+Log4J 的使用模式与曾为霸主地位的 JCL+Log4J 的用法进行一下对比(请忽略掉包文件中的版本号): 

SLF4J+Log4j 组合 对比 JCL+Log4J 组合 
slf4j-api-1.5.11.jar 相当,定义高层 API commons-logging-1.1.jar 
slf4j-log4j12-1.5.11.jar 相当,左边是用绑定包,右边 
是用配置文件来指定日志实现 commons-logging.properties,内容为: 
org.apache.commons.logging.LogFactory= 
org.apache.commons.logging.impl.LogFactoryImpl 
或者 
org.apache.commons.logging.Log= 
org.apache.commons.logging.impl.Log4JLogger 
log4j-1.2.15.jar 一样 log4j-1.2.15.jar 
log4j.properties 一样,原来怎么配置现在也是 log4j.properties 
程序代码中: 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

Logger logger = LoggerFactory.getLogger(TestSlf4j.class); 
logger.info("Hello {}","SLF4J"); 左边侵入的是 SLF4J API,右边是被 JCL 的 API 污染了 

SLF4J 支持参数化,而 JCL 不能 程序代码中: 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

Log log = LogFactory.getLog(TestJCL.class); 

log.info("Hello JCL"); 

从上面的对比来看,SLF4j+Log4j 与 JCL+Log4J 的使用方式差不多,主要差异就在 SLF4J 用 jar 来告知用哪种日志实现,而 JCL 是通过配置文件来获得该选择哪个日志实现。

 

为 什么会兴起 SLF4J,看看我们原来哪一个框架中,大的如 SSH 三雄(Spring、Struts、Hibernate),还有 WAS 应用服务器,小的就不计其数以前用的通用日志框架都清一色的 Jakarta Commons Logging(JCL),日志实现会选用 Log4j,为何现在 Hibernate、Tapesty、DbUnit、Jetty V6 等纷纷变节,都采用了 SLF4J 了呢?SLF4J 与 JCL 相比,定然是有其可表之处。而其中 SLF4J 受类加载器的影响较小,不易产生内存溢出的问题,性能得到了改善,更主要是顺应了潮流的发展--可方便部署到 OSGI 环境中.

 

SLF4J+LogBack

 

前 面讲的 SLF4J 的用法之一是 SLF4J+Log4J,而这里要推出的组合是 SLF4J+LogBack。不用 Log4J?难道还有比 Log4J 更好的日志实现吗?是的,答案就是 LogBack。假如你知道 LogBack 和 Log4J 是同出一位大师之手,你就不会觉得惊讶了。LogBack 对 Log4J 进行了增强,并投入了 SLF4J 的怀抱,它还被作者认定为 Log4J 的继任者。 

 

Logback 分为三个模块:logback-core,logback-classic,logback-access。logback-core 是核心;logback-classic 改善了 log4j,且自身实现了 SLF4J API,所以即使用 Logback 你仍然可以使用其他的日志实现,如原始的 Log4J,java.util.logging 等;logback-access 让你方便的访问日志信息,如通过 http 的方式。 

还得提一点,Logback 能更好的放到 OSGI 环境中。好了,简单绍完了 Logback,就来看看具体怎么用它。 

需要的配置文件和组件包,下面三个 jar 文件和一个 xml文件都是要放在项目的 ClassPath 上。 

 

slf4j-api-1.5.11.jar 
logback-core-0.9.20.jar 
logback-classic-0.9.20.jar 
logback.xml 或 logback-test.xml (类似于 log4j.properties/log4j.xml) 

 

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

 

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

 

 

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2.   <configuration>   
  3.     <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">            
  4.          <encoder charset="GBK">   
  5.             <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>   
  6.          </encoder>   
  7.      </appender>       
  8.      <root level="DEBUG">   
  9.        <appender-ref ref="stdout" />   
  10.      </root>   
  11.   </configuration>   

 

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

 

使用 Logback  的代码 

 

 

[xhtml] view plaincopy
  1. package com.unmi;   
  2.    
  3. import org.slf4j.Logger;   
  4. import org.slf4j.LoggerFactory;   
  5.    
  6. public class TestLogback {   
  7.     private static final Logger logger = LoggerFactory.getLogger(TestLogback.class);   
  8.    
  9.    public static void main(String[] args) {   
  10.         logger.info("Hello {}","TestLogback");   
  11.     }   
  12. }   

 

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

 

执行上面的代码,输出: 

21:38:43.031 [main] INFO  com.unmi.TestLogback - Hello TestLogback 

还是和上次一样,这里就拿 SLF4J+Logback 和 SLF4J+Log4J 两种方式作下比较:

分享到:
评论

相关推荐

    日志 log4j-slf4j+logback1.3.0

    本文将深入探讨“日志4j(Log4j)、SLF4J(Simple Logging Facade for Java)和logback 1.3.0”这三者之间的关系以及它们在Java应用中的作用。 首先,Log4j是Apache软件基金会开发的一个流行的日志记录框架,它允许...

    Tomcat + SLF4J + Logback 2017年10月最新包(Tomcat7~9)

    https://github.com/tomcat-slf4j-logback/tomcat-slf4j-logback上的jar与源码,网络不好,下载不易,特此分享。包括: logback-1.2.3.zip Tomcat7.0.82\tomcat-juli-7.0.82-slf4j-1.7.25-logback-1.2.3.zip Tomcat...

    slf4j-1.6.1+logback-0.9.24.rar

    janino-2.3.17.jar 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 ... slf4j-1.6.1+logback-0.9.24.rar slf4j-api-1.6.1.jar

    slf4j-log4j12-1.7.7.jar下载

    在实际应用中,你需要确保同时拥有SLF4J的API(slf4j-api-*.jar)和这个绑定器(slf4j-log4j12-1.7.7.jar)在你的类路径中,同时还需要Log4j1.2的核心库(log4j-*.jar)。如果你的应用程序中还包含了其他使用SLF4J的...

    slf4j-log4j12-1.7.12.jar、slf4j-api-1.7.12.jar

    SLF4J的主要目的是为各种日志框架,如log4j、logback等,提供一个统一的接口,使得应用程序可以独立于具体的日志实现进行开发,提高了代码的可移植性和灵活性。 标题中的"slf4j-log4j12-1.7.12.jar"是SLF4J的一个...

    slf4j-log4j12-1.5.6.jar

    SLF4J (Simple Logging Facade for Java) 是一个用于各种日志框架的简单抽象,例如java.util.logging、Logback 和 Log4j。它的主要目的是为应用程序提供一个可插入的日志接口,允许最终用户在部署时插入所需的日志库...

    logback-slf4j日志配置文件-下载即可使用

    logback-slf4j还可以与lombok结合使用,通过使用lombok的 `@slf4j` 注解,可以方便地输出日志。 logback-slf4j日志配置文件提供了一种灵活、可靠的日志记录解决方案,能够满足不同的日志记录需求。

    slf4j-log4j12-1.7.2.jar 亲测可用

    SLF4J (Simple Logging Facade for Java) 是一个用于日志记录的接口层,它为各种日志框架,如Logback、Log4j、Java Util Logging等提供了一个统一的API。SLF4J的主要目的是使得应用程序可以在部署时选择任何支持的...

    slf4j-log4j12-1.7.5.jar

    slf4j-log4j12-1.7.5.jar。

    slf4j-log4j12-1.5.5.jar、slf4j-log4j12-1.5.6.jar、slf4j-api-1.5.6.jar

    在实际开发中,SLF4J通常与具体的日志实现一起使用,比如Log4j、Logback等。通过SLF4J,开发者可以在不修改代码的情况下,切换不同的日志实现,这对于多模块项目尤其有用,因为每个模块都可以依赖SLF4J,而项目的...

    slf4j-log4j12 等jar包.rar

    这个"slf4j-log4j12.jar"文件就是SLF4J与Log4j 1.2桥接器的实现,它使得SLF4J调用能够被Log4j 1.2的日志系统捕获并处理。 1. **SLF4J**:SLF4J的设计目标是为各种日志API提供一个简单统一的接口,这样应用程序就...

    slf4j-log4j12-1.6.6.jar

    SLF4J(Simple Logging Facade for Java)与Log4j12的集成包`slf4j-log4j12-1.6.6.jar`是Java开发中常用的日志处理工具,它允许开发者使用SLF4J的API,同时实现在运行时绑定到Log4j 1.2框架。这个版本的jar包包含了`...

    slf4j-1.7.25jar包+logback-1.2.3jar包

    SLF4J作为一个日志门面,提供了一种标准的接口,允许开发者在运行时插入任何底层日志框架,如Logback、Log4j或Java内置的日志系统。而Logback则是SLF4J的一个实现,它具有高效、灵活和强大的特性,被设计用来取代较...

    slf4j-log4j12-1.6.1.jar和slf4j-api-1.6.1.jar

    SLF4J-api-1.6.1.jar包含了SLF4J的API,而slf4j-log4j12-1.6.1.jar是SLF4J的一个绑定实现,它桥接了SLF4J API和Log4j的具体实现。 首先,我们来深入了解一下SLF4J。SLF4J的核心是一个接口层,它定义了一套标准的...

    slf4j-api-1.7.7,slf4j-log4j12-1.7.7

    "slf4j-log4j12-1.7.7"则是SLF4J的一个绑定实现,它将SLF4J的API与Log4j 1.2.x版本的日志实现进行了绑定。在项目中引入这个库,可以确保SLF4J调用的日志被Log4j处理并输出。这使得在不修改代码的情况下,可以方便地...

    slf4j-log4j12-1.6.1.jar+slf4j-api-1.6.1.jar

    SLF4J(Simple Logging Facade for Java)和Log4j是Java开发中常用的日志处理框架,它们在构建SSH(Struts、Spring、Hibernate)和MVC(Model-View-Controller)架构的Web应用程序时扮演着至关重要的角色。...

    slf4j-api-1.7.12.jar slf4j-log4j12-1.7.12.jar

    SLF4J(Simple Logging Facade for Java)是Java中的一种日志抽象层,它为各种日志框架,如Log4j、Logback等提供一个简单的接口,使得开发者能够在不改变代码的情况下更换日志实现。这个接口使得应用程序的代码与...

    slf4j+logback 于log4j+commons-logging大PK

    今天我们将聚焦两个流行的日志框架——SLF4J(Simple Logging Facade for Java)和Logback,以及它们与Log4j和Commons-Logging的对比。 SLF4J是一个接口层的日志框架,它提供一个统一的API,允许用户在运行时插入...

    slf4j-api-1.6.1.jar+slf4j-log4j12-1.6.1.jar+log4j-1.2.17.jar

    在实际应用中,这三者结合使用,开发者可以在代码中通过SLF4J的API进行日志记录,然后通过`slf4j-log4j12`的绑定模块,将这些日志请求路由到Log4j,由Log4j负责实际的日志输出工作。这样做的好处是解耦了日志实现与...

    slf4j-api-1.6.1和slf4j-log4j12-1.6.1和log4j-1.2.16包

    在本案例中,我们讨论的是SLF4J API的1.6.1版本,以及两个与之配合使用的日志实现:slf4j-log4j12-1.6.1和log4j-1.2.16。 **SLF4J API-1.6.1** SLF4J API是一个接口集,它定义了日志记录的各种方法,如`debug()`, `...

Global site tag (gtag.js) - Google Analytics