SLF4J 运用手册-Java-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝26
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:132回复:0

  SLF4J 运用手册

楼主#
更多 发布于:2016-05-30 22:13

Java的简略日志门面( Simple Logging Facade for Java

 SLF4J)作为一个简略的门面或笼统,用来服务于各式各样的日志结构,比方java.util.logging、logback和log4j。SLF4J答应最终用户在布置时集成自个想要的日志结构。

需求留意的是,你的运用启用SLF4J意味着需求一个额外的依靠:slf4j-api-1.7.19.jar。

从1.6.0开端:假如在class

path没有找到绑定,SLF4J将默许一个无操作的完成。

从1.7.0开端:Logger接口中的打印办法如今供给variants取代了Object[]用来接纳可变长参数。这个改动意味着SLF4J需求JDK

1.5或更高的版别。Java编译器在底层把办法中的可变参数有些转换成Object[]。因而,编译器生成的Logger接口在1.7.x版别中和它对应的的1.6.x版别中是没有差异的。因而SLF4J得1.7.x版别和1.6.x版别是

彻底兼容的。

从1.7.5开端:日志的检索时刻有了一个明显的改善,鉴于这个改善,十分鼓舞用户搬迁到SLF4J

1.7.5或更高的版别。

从1.7.9开端: 经过设置

 slf4j.detectLoggerNameMismatch系统属性为true,SLF4J能主动的  spot incorrectly named

loggers.

Hello World

依照惯例,下面的示例阐明最简略的办法运用SLF4J输出”hello

world“。他首要获取一个名为”HelloWorld“的记载器,这个记载器用来记载”HelloWorld“。

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发行版 download the slf4j

distribution,然后解压。做完这些以后,把 slf4j-api-1.7.19.jar增加到你的class path。

编译运转HelloWorld,控制台将有一下输出:

SLF4J: Failed to load class

"org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP)

logger implementation SLF4J: See

http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

这个正告会被打印是因为在class path下没有找到绑定的slf4j。

一旦你增加一个绑定在你的class path下,这个正告将会不见。假定你增加了

slf4j-simple-1.7.19.jar,你的class path包括:

slf4j-api-1.7.19.jar

slf4j-simple-1.7.19.jar

编译并运转HelloWorld程序,如今在控制台会有下列输出:

0 [main] INFO HelloWorld - Hello World

典型运用形式

下面的示例代码表明晰SLF4J的典型运用形式。留意15行”{}“的运用,检查  “What is

the fastest way of logging?”获取更多细节。

1: import org.slf4j.Logger;   2: import

org.slf4j.LoggerFactory;   3:   4: public class Wombat {  5:   6:   final Logger

logger = LoggerFactory.getLogger(Wombat.class);   7:   Integer t;  8:   Integer

oldT;  9:10:   public void setTemperature(Integer temperature) {11:    12:    

oldT = t;        13:     t = temperature;14:15:     logger.debug("Temperature

set to {}. Old temperature was {}.", t, oldT); 16:17:    

if(temperature.intValue() > 50) {18:       logger.info("Temperature has risen

above 50 degrees."); 19:     }20:   }21: }

在布置时绑定一个日志结构

像在之前提到过的,SLF4J支撑各式各样的日志结构。SLF4J的发行版顺便的几个jar被称为”

SLF4J bindings“ ,每个绑定都对应一个支撑的结构。

slf4j-log4j12-1.7.19.jar

绑定  log4j version 1.2,一个广泛运用的日志结构,你也需求在class

path放置  log4j.jar。

slf4j-jdk14-1.7.19.jar

绑定 java.util.logging,也被称为JDK 1.4 日志。

slf4j-nop-1.7.19.jar

绑定 NOP,默默地打出一切的日志。

slf4j-simple-1.7.19.jar

绑定

 Simple完成,输出一切的System.err事件,只需INFO和更高等级的信息会被打印。这个绑定或许 在小运用程序的上下文中十分有用。

logback-classic-1.0.13.jar (requires

logback-core-1.0.13.jar)

本地完成:也有SLF4J的绑定在SLF4J项目以外,比方  logback

在本地完成了SLF4J。Logback的 ch.qos.logback.classic.Logger 类直接完成了SLF4J的

 org.slf4j.Logger接口。因而,和logback一同运用SLF4J涉及到严厉零内存和核算开支。

切换日志结构,只需求更换class path中的slf4j绑定。比方说,从

 java.util.logging切换到 log4j,只是把  slf4j-jdk14-1.7.19.jar更换成

slf4j-log4j12-1.7.19.jar。

SLF4J不依靠于特定的类加载机制。事实上,每个SLF4J绑定在编译时硬衔接来运用一个指定的日志结构。比方说,

slf4j-log4j12-1.7.19.jar在编译时绑定运用log4j。在你的代码中,除

 slf4j-api-1.7.19.jar以外,只能有一个你挑选的绑定 到准确的class path 途径上。不要在class path

放置多个绑定。下面是一个图表来阐明一般的主意。

SLF4J接口和他们的各式各样的适配器十分简略。大多数了解Java言语的开发者应当能在一小时以内读懂代码。不需求类加载的常识。因而,SLF4J没有遭受类加载疑问或许

Jakarta Commons Logging (JCL)观察到的内存走漏疑问。

鉴于SLF4J接口的简略性和它的布置模型,新的日志结构开发者应当觉得很简略编写SLF4J绑定。

为了防止给他们的终端用户强加一个日志结构

,一些组件和库的作者也许会对于SLF4J接口进行编程。因而,终端用户在布置时能够经过在classpath刺进对应的slf4j绑定来挑选他们希望的日志结构。而且,能够把在classpath存在的绑定替

换到别的一个,然后重启运用,然后达到切换日志结构的意图,这个办法被证实是十分简略和健壮的。

SLF4J的1.6.0版别,假如在class path

没有发现绑定,slf4j-api将默许一个无操作的完成来疏忽一切的日志请求。因而,SLF4J从1.6.0版开端宣布一个短少绑定的正告,然后丢弃一切的打印日志请求,而不是抛出NoClassDefFoundError异

常因为短少org.slf4j.impl.StaticLoggerBinder类 。比方说: Wombat

一些根底结构依靠于SLF4J来打印日志。为了防止强加一个日志结构给终端用户,Wombat  包括  slf4j-api.jar可是没有绑定。在class

path 没有SLF4J绑定的情

况下,Wombat的发行版依然能开箱即用,不需求终端用户下载从SLF4J网站下载一个绑定。只是当终端用户敞开日志的时分,将需求装置他挑选的日志结构对应的SLF4J绑定。

基本准则:内置的组件比方库和结构不应当声明任何SLF4J的依靠,可是依靠于SLF4J-api。当一个库在一个指定的绑定声明一个传递依靠,这个强加于终端用户的绑定否定了SLF4J的意图。留意,在绑定上声明一个非传递性的依靠,比方说

对测验,不影响终端用户。

内嵌组件中SLF4J的运用也在FAQ中进行评论。有联系的章节:  logging

configuration   dependency reduction testing

声明项意图日志依靠

鉴于Maven的传递依靠规矩,对于”regular“项目(不是库和结构),日志依靠声明

能够经过一个独自的依靠声明来完成。

LOGBACK-CLASSIC: 假如你希望运用

logback-classic 作为底层的日志结构,你需求做的一切作业即是声明”

ch.qos.logback:logback-classic“依靠到你的pom.xml文件中。除了

logback-classic-1.0.13.jar以外,它将拉取 slf4j-api-1.7.19.jar和 logback-core-1.0.13.jar

到你的项目中。留意,显式的声明  logback-core-1.0.13或  slf4j-api-1.7.19.jar

没有错,而且也许需求强加一个准确的版别。

ch.qos.logbacklogback-classic1.0.13

LOG4J:假如你希望运用log4j作为底层的日志结构,你需求做的一切作业即是声明”

org.slf4j:slf4j-log4j12“依靠到你的pom.xml文件中。除了 slf4j-log4j12-1.7.19.jar以外,它将拉取

slf4j-api-1.7.19.jar和  log4j-1.2.17.jar到你的项目 中。留意,显现地声明一个依靠  log4j-1.2.17.jar或

slf4j-api-1.7.19.jar 没有错。而且也许需求强加一个准确的版别

org.slf4jslf4j-log4j121.7.19

JAVA.UTIL.LOGGING:假如你希望运用

 java.util.logging 作为底层的日志结构,你需求做的一切作业即是声明”

org.slf4j:slf4j-jdk14“依靠到你的pom.xml文件中。除了 slf4j-jdk14-1.7.19.jar以外,它将拉取

 slf4j-api-1.7.19.jar到你 的项目中。留意,显现地声明一个依靠  slf4j-api-1.7.19.jar

没有错。而且也许需求强加一个准确的版别。

org.slf4jslf4j-jdk141.7.19

二进制兼容

一个SLF4J绑定指定一个详细的依靠用来在底层日志结构绑定slf4j,比方说

slf4j-jdk14.jar或 slf4j-log4j12.jar。

不一样版别的 slf4j-api.jar和SLF4J绑定混合在一同也许会引起疑问。比方说,假如你运用

 slf4j-api-1.7.19.jar,然后你应当运用 slf4j-simple-1.7.19.jar,运用

slf4j-simple-1.5.5.jar将不会正常作业。

可是,从客户端的观念来看,一切版别的 slf4j-api都是兼容的。运用

slf4j-api-N.jar编译的客户端代将和  slf4j-api-M.jar一同完美运转,N和M都是恣意的。你只是需求保证你绑定的版别和

slf4j-api.jar 匹配。你不需求担心项目中给定的依 赖的slf4j-api.jar的版别。你能够运用任何版别的 slf4j-api.jar,只需

slf4j-api.jar的版别和它的绑定匹配,就不会有疑问。

在初始化的时刻,假如SLF4J怀疑也许有不匹配疑问。将会宣布对于不匹配的正告信息。

经过SLF4J一致日志

一般,一个给定的项目依靠于各式各样的组件,这些组件依靠的日志API不是SLF4J。一个项目依靠于一个JCL、java.util.logging、log4j和SLF4J是很多见的。然后经过一个独自的方法来一致日志变得让人满意。SLF4J经过供给对JCL、

java.util.logging、和slf4j的桥接模块来满意这个一般的用例。更详细的内容,请参考 Bridging legacy APIs.

MDC支撑

“Mapped Diagnostic

Context”本质上是日志结构包括的一个map,运用程序代码供给了key-value对,这个键值对能被日志结构刺进到日志信息中去。MDC数据在过滤信息或触发某些操作时是十分有用的。

SLF4J支撑MDC,假如一个底层的日志结构供给了MDC功用,SLF4J将托付给底层日志结构的MDC。留意,如今只是只需log4j和logback供给了MDC功用。假如底层日志结构不支撑MDC,比方说java.util.loggin,SLF4J将存储MDC数

据,可是里边的数据需求用户经过代码来获取。

因而,作为一个SLF4J运用者,能运用当 log4j和logback存在时的

MDC信息,可是不能强迫用户依靠这些日志结构。

对于MDC的更多信息参见 chapter on MDC

举动大纲

Advantage

Description

在布置时分挑选日志结构

经过在class path刺进适宜的jar,希望的日志结构能在布置时集成。

迅速失利操作

因为虚拟机加载类的方法,很早就主动验证结构绑定。假如SLF4J没有在class path

发现一个绑定,它将会宣布一个正告信息,而且默许一个无操作的完成。

绑定盛行的日志结构

SLF4J支撑盛行的日志结构,log4J、java.util.logging、Simple

logging和NOP。  logback天然生成支撑SLF4J。

桥接留传的logging APIs

经过SLF4J完成JCL,如

 jcl-over-slf4j.jar,将答应项目搬迁到SLF4J,没有破坏运用JCL的软件的兼容性。相同的,  log4j-over-slf4j.jar 和

 jul-to-slf4j模块重定向log4j到SLF4J。检查             Bridging legacy APIs 获取更多信息

移动你的源码

slf4j-migrator东西能协助你搬迁你的代码来运用SLF4J。

支撑参数化的日志信息

一切的SLF4J绑定支撑参数化的日志信息。而且能够明显进步功能。 improved

performance

优质IT资源分享社区为你提供此文。

本站有大量优质Java教程视频,资料等资源,包含java基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。

java教程视频

优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客