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

新一代通用日志框架 SLF4J 用户指南

阅读更多

地址:http://foxarmywave.blog.163.com/blog/static/173860086201161953242183/?suggestedreading

 

SLF4J 用户指南
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

Simple Logging Facade for Java(简单日志门面--门面一词总觉有些别扭,还没找到更好的词),简称 SLF4J,是作为各种日志框架的简单门面或者抽象的。比如,那些日志框架有 java.util.logging, log4j logback 等,SLF4j 允许终端用户在部署的时候插入自己想要的日志框架。

Hello World

依照编程的传统,这个例子描绘了简单的方式来使用 SLF4j 输出 "Hello world"。它从获得一个名为 "HelloWorld" logger 开始。接着使用这个 logger 输出 "Hello World" 日志消息。

1

2

3

4

5

6

7

8

9

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

public class HelloWorld {

  public static void main(String[] args) {

    Logger logger = LoggerFactory.getLogger(HelloWorld.class);

    logger.info("Hello World");

  }

}

要运行上面的例子,你首先需要下载 slf4j 的发行包,然后解压。完了之后,把下面两个 jar 文件加到你的类路径上:

●   slf4j-api-1.5.11.jar
●   slf4j-simple-1.5.11.jar

编译并运行 HelloWorld,将会在控制台打印出如下输出。

0 [main] INFO HelloWorld - Hello World

典型使用模式

下面的示例代码说明了 SLF4J 的典型使用模式。注意到在 15 行使用了 {} 占位符。可参考 FAQ 中的问题 "什么是日志最快捷的方式" 得到更详细的说明。

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

public class Wombat {

 

    final Logger logger = LoggerFactory.getLogger(Wombat.class);

    Integer t;

    Integer oldT;

 

    public void setTemperature(Integer temperature) {

 

        oldT = t;

        t = temperature;

 

        logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);

 

        if (temperature.intValue() > 50) {

            logger.info("Temperature has risen above 50 degrees.");

        }

    }

}

在部署时和某个日志框架进行绑定

以前面提到过,SLF4J 支持多种日志框架。SLF4J 发行包中自带几个 jar 文件作为 "SLF4J bindings" 的参考。

slf4j-nop-1.5.11.jar
绑定到 NOP,沉默的忽略掉所有的日志

slf4j-simple-1.5.11.jar
绑定到 Simple 实现,输出所有的事件到 System.err。只有 INFO 或更高级别的信息才会被打印出来。
这种绑定方式对于小应用程序是很有用的。

slf4j-log4j12-1.5.11.jar
绑定 1.2 版的 log4j,一个被广泛使用的日志框架。需要你把 log4j.jar 放置到你的类路径下。

slf4j-jdk14-1.5.11.jar
绑定 java.util.logging, 它也是 JDK 1.4 日志的参考实现(例子)

slf4j-jcl-1.5.11.jar
绑定 Jakarta Commons Logging. 这种绑定会把所有的 SLF4J 日志代理到 JCL

还有由 SLF4J 绑定而发展出来的项目,如 logback,它自身实现了 SLF4JLogback ch.qos.logback.classic.Logger 类就是直接实现了 SLF4J  org.slf4j.Logger 接口的。因此,联合使用 SLF4J logback 可以完全的解决零内存和计算负载的问题。

想要切换日志框架的话,仅仅是替换掉类路径下的 slf4j 绑定。例如,将要从ava.util.logging 切换到 log4j,只需要用 slf4j-log4j12-1.5.11.jar 替换掉 slf4j-jdk14-1.5.11.jar

SLF4J 不依赖于任何的类加载器机制。实际上,每一个 SLF4J 绑定都会在编译时使用一种也只能使用一种特定日志框架。例如,slf4j-log4j12-1.5.11.jar 绑定会在编译时使用 log4j。在你的代码中,除了 slf4j-api-1.5.11.jar 之外,你只需简单的把你选择的一个且只能一个绑定放到正确的类路径下。不要在你的类路径上放置超过了一个的绑定。这里图形化描述了这一大意。

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="图片_x0020_1" o:spid="_x0000_i1025" type="#_x0000_t75" alt="说明: http://www.blogjava.net/images/blogjava_net/framework/others/bindings.png" href="http://www.blogjava.net/images/framework/others/bindings.png" style='width:449.25pt; height:509.25pt;visibility:visible;mso-wrap-style:square' o:button="t"> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.png" o:title="bindings" /> </v:shape><![endif]--><!--[if !vml]-->说明: http://www.blogjava.net/images/blogjava_net/framework/others/bindings.png<!--[endif]-->

SLF4J 接口和它的各种适配器相当的简单。多数熟悉  Java 语言的开发者应当能在一个小时内读懂并完全理解它的代码。不需要类加载器相关的知识也能用好它,它不会直接涉及到类加载器。因而,要是 SLF4J 遇到类加载器或是内存溢出的问题,应该去查查是否是 Jakarta Commons Logging(JCL) 造成的。

组件和库

广泛发布的组件和库的作者不会在他们的代码中使用 SLF4J 接口,这是以避免在组件和库的终端用户上导入日志框架。他或是她也许会在部署时通过往类路径上插入想要的 slf4j 绑定来选择所要日志框架,这也可以在尔后在类路径上用另一个来替换当前的绑定,然后重启应用。这种方法已被证明是简单且很具鲁棒性的。

通过 SLF4J 统一日志

经常地,一个给定的项目用到了各种组件,它们依赖了非 SLF4J 的不同日志 API。一般会发现项目混搭使用了  JCLjava.util.logginglog4j SLF4J。这时个要把日志统一到单一通道上是令人向往的。SLF4J 通过提供桥接到 JCLjava.util.logging log4j 的模块恰好满足了这一通用需求。更详细信息,请参看页面 Bridging legacy APIs

线程映射表(MDC) 支持

"Mapped Diagnostic Context" (有译作线程映射表)实质上就是一日志框架维护的 map,日志框架通过提供了的键值对向其中插入日志信息。

SLF4J 支持 MDC,或者说线程映射表。如果下层日志框架提供 MDC 特性,那么 SLF4J 将会把 MDC  支持委派给下层框架 。注意,当前只有 log4j logbak 具有 MDC 特性。要是下层框架不提供 MDC 支持的话,比如 java.util.logging, SLF4J 仍将会存储 MDC 数据,但是需要用户定制代码来获取那些信息。

因此,作为一个 SLF4J 用户,想要得到 MDC 优点的话就要用到 log4j  或者 logback,但也不会强制这些框架与你的用户间产生依赖。

更多 MDC 的相关信息,请参见 logback 手册的 MDC 章节

行动纲要

优点

描述

部署时选择你的日志框架

在部署时通过在你的类路径上放上相应的 jar 文件就可以插入你想要的日志框架.

快速失败操作

由于是 JVM 决定的类加载方式, 所经框架绑定会在一开始就被自动校验. SLF4J 在不存在绑定的时候以警告提示而放弃执行.

绑定流行的日志框架

SLF4J 支持流行的日志框架, 例如 log4j, java.util.logging, Simple logging  NOP. logback 项目原生的支持 SLF4J.

桥接到遗留 API

JCL over SLF4J 实现 jcl-over-slf4j.jar, 允许你的项目逐步迁移到到 SLF4J , 不会破坏现有软件使用 JCL 的兼容性. 类似的, log4j-over-slf4j.jar jul-to-slf4j 模块允许你各自转换 log4j java.util.logging SLF4J . 详细信息,参看页面 B桥接遗留 API.

迁移你的源代码

slf4j-migrator 工具能帮助迁移你的源代码来使用 SLF4J.

支持参数化日志信息

 

 

分享到:
评论

相关推荐

    slf4j日志框架的源代码分享

    SLF4J(Simple Logging Facade for Java)是Java中的一种日志门面(Logging Facade),它为各种日志框架提供了一个简单的统一接口,如Log4j、Java Util Logging、Logback等。通过SLF4J,开发者可以在运行时绑定任意...

    slf4j完整日志文件

    SLF4J(Simple Logging Facade for Java)是Java中的一种日志门面(Logging Facade),它为各种日志框架提供了一个简单的统一接口,如Log4j、Java Util Logging (JUL)、Logback等。这个接口允许最终用户在部署时插入...

    android slf4j log4j日志框架

    SLF4J(Simple Logging Facade for Java)和Log4j是两个广泛使用的日志框架,它们在Java生态系统中占据着重要地位,包括Android开发。 SLF4J是一个接口层,它提供了一组通用的日志API,允许开发者选择任何兼容的...

    log4j-2.11.2的jar包和日志门面slf4j的jar包

    Log4j和SLF4J(Simple Logging Facade for Java)是Java领域广泛使用的两个日志框架,它们有着各自的特点和用途。下面将详细阐述这两个框架以及它们在给定压缩包中的具体组件。 首先,Log4j是Apache软件基金会的一...

    log4j + slf4j-api + slf4j-log4j12

    在给定的标题和描述中,我们看到了两个关键的日志框架——`log4j`和`SLF4J(Simple Logging Facade for Java)`,以及它们之间的桥接器`slf4j-log4j12`。这些组件是Java日志处理的常用工具,让我们详细了解一下它们...

    SLF4j中文使用手册

    SLF4J(Simple Logging Facade for Java)是一个用于Java编程语言的日志门面框架,它提供了一个简单的抽象层,用以使用各种日志框架,例如java.util.logging、logback和log4j。门面模式的好处在于,开发者可以在不同...

    slf4j jar包

    SLF4J(Simple Logging Facade for Java)是Java中的一种日志门面(Logging Facade),它为各种日志框架提供了一个简单的统一接口,如Log4j、Java Util Logging、Logback等。这个jar包是SLF4J的核心组件,用于在应用...

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

    SLF4J提供了一种机制,通过在类路径中放置特殊的“禁止”JAR(如jul-to-slf4j.jar),可以防止Java Util Logging(JUL)等其他日志框架的直接使用,从而保持日志系统的统一。 标签"slf4j"表明了这两个JAR文件与SLF4...

    Java Slf4j依赖包

    Java Slf4j,全称为Simple Logging Facade for Java,是一个为各种日志框架提供一个简单统一的接口,使得最终用户能够在部署时配置他们希望的日志框架。Slf4j允许开发者在部署应用时插入所需的日志实现,无需修改...

    slf4j输入日志到mongodb

    SLF4J(Simple Logging Facade for Java)是Java中一个用于日志记录的抽象层,它提供了一种标准的日志记录接口,使得开发者可以选择不同的日志实现框架,如Log4j、Logback等。MongoDB则是一个流行的NoSQL数据库系统...

    slf4j-api.jar和slf4j-nop.jar打包下载

    SLF4J(Simple Logging Facade for Java)是Java中一个重要的日志抽象层,它为各种日志框架,如Log4j、java.util.logging、Logback等提供了一个统一的接口。通过SLF4J,开发者可以在不修改代码的情况下更换底层的...

    非web工程使用slf4j输出日志

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

    slf4j最新jar包下载和jar包

    SLF4J(Simple Logging Facade for Java)是Java中的一种日志抽象层,它提供了一个接口,允许用户在运行时动态地绑定到各种具体的日志框架,如Log4j、Java内置的日志或者Logback等。这个设计使得开发者可以在不修改...

    Slf4j日志相关jar包

    **Slf4j日志框架详解** Slf4j(Simple Logging Facade for Java)是一个用于日志系统的简单 facade,它允许最终用户在部署他们的应用时使用他们希望的日志库。Slf4j提供了一个统一的API,使得开发人员能够在不更换...

    使用Slf4j集成Log4j2构建项目日志系统的完美解决方案.docx

    使用Slf4j集成Log4j2构建项目日志系统的完美解决方案 Slf4j是简单的日志外观(Facade)模式,它提供了统一的日志接口,使得用户可以选择不同的日志实现。Slf4j的出现使得日志系统的开发变得更加灵活和便捷。Log4j2...

    Springboot项目使用Slf4j将日志保存到本地目录的实现代码

    Slf4j 是一个 Java 日志记录门面,它提供了一个通用的日志记录API,允许开发者使用不同的日志记录框架,例如 Logback、Log4j 等。在 Springboot 项目中,Slf4j 是默认的日志记录框架。本文将介绍如何使用 Slf4j 将...

    slf4j与其它日志api的结合

    SLF4J的主要目的是为各种日志API提供一个简单统一的接口,使得最终用户能够在部署他们的应用时插入所需的日志框架。 日志API在软件开发中扮演着重要角色,它帮助开发者跟踪程序的运行状态,调试错误,记录关键事件...

    日志 log4j-slf4j+logback1.3.0

    SLF4J的主要目的是解耦应用程序的日志代码与实际的日志实现,使得开发者可以在不修改代码的情况下更换日志框架。SLF4J提供了一套简单的API,用于编写日志语句,然后在运行时通过绑定具体的日志实现(如Log4j、Java...

    slf4j日志,可以使用它代替LOG4J

    - **接口**: SLF4J提供了一系列的日志记录接口,如`Logger`, `Level`等,这些接口没有具体的实现,而是作为各种日志框架的通用接口。 - **绑定**: SLF4J需要与其他日志实现绑定才能工作,例如Logback、Log4j等。这个...

    调试日志之slf4j+logback

    SLF4J(Simple Logging Facade for Java)是一个日志门面,它为各种日志框架提供了统一的接口,如Log4j、Logback等。它的主要目的是让开发者能够在部署时自由选择所需的日志实现,而无需修改代码。SLF4J通过引入`...

Global site tag (gtag.js) - Google Analytics