slf4j简介

SLF4J不是日志框架而是一个简单日志门面,它的目的是允许最终用户在部署时使用期望的日志框架。

  The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framework at deployment time.

所以SLF4J在使用时除了自身的jar包外,还需要日志框架以及适配器。

  以应用中使用log4j为例。需要依赖slf4j-api,slf4j-log4j,log4j。

使用方法:

  Logger logger = LoggerFactory.getLogger(getClass());

实现原理:

  SLF4J 在编译时静态绑定org.slf4j.impl.StaticLoggerBinder,而适配器中必须包含这个类。

  LoggerFactory:

  public static ILoggerFactory getILoggerFactory() {
    if (INITIALIZATION_STATE == UNINITIALIZED) {
      INITIALIZATION_STATE = ONGOING_INITIALIZATION;
      performInitialization();
    }
    switch (INITIALIZATION_STATE) {
      case SUCCESSFUL_INITIALIZATION:
        return StaticLoggerBinder.getSingleton().getLoggerFactory();
      case NOP_FALLBACK_INITIALIZATION:
        return NOP_FALLBACK_FACTORY;
      case FAILED_INITIALIZATION:
        throw new IllegalStateException(UNSUCCESSFUL_INIT_MSG);
      case ONGOING_INITIALIZATION:
        // support re-entrant behavior.
        // See also http://bugzilla.slf4j.org/show_bug.cgi?id=106
        return TEMP_FACTORY;
    }
    throw new IllegalStateException("Unreachable code");
  }
}

SLF4J与Common-Logging的区别

  Common-Logging是apache提供的一个通用的日志接口。这两个日志门面的功能类似,不同的是实现方式不一样。SLF4J是通过静态绑定的方式得到日志框架,而Common-Logging是动态查找方式。

Common-Logging 使用方式:Log logger = LogFactory.getLog(getClass());

Common-Logging 动态查找原理:LogFactory 的内部会去装载具体的日志系统,并获得实现该Log 接口的实现类。LogFactory 内部装载日志系统的流程如下:

  1. 首先,寻找org.apache.commons.logging.LogFactory 属性配置。
  2. 否则,利用JDK1.3 开始提供的service 发现机制,会扫描classpah 下的META-INF/services/org.apache.commons.logging.LogFactory文件,若找到则装载里面的配置,使用里面的配置。
  3. 否则,从Classpath 里寻找commons-logging.properties ,找到则根据里面的配置加载。
  4. 否则,使用默认的配置:如果能找到Log4j 则默认使用log4j 实现,如果没有则使用JDK14Logger 实现,再没有则使用commons-logging 内部提供的SimpleLog 实现。

PS:如果想从Common-logging切换到SLF4J,可以添加jar包:jcl-over-slf4j,slf4j-api。代码不需要任何修改。

参考链接:

  http://www.slf4j.org/

  http://www.360doc.com/content/14/0310/21/12129652_359387856.shtml

  http://blog.csdn.net/yycdaizi/article/details/8276265

时间: 2024-09-28 05:04:11

slf4j简介的相关文章

slf4j简介(一)

一.什么是slf4j? slf4j,simple logging facade for java的缩写,翻译为java的简单日志外观.slf4j是一个开源项目,它提供我们一个一致的API来使用不同的日志框架,比如: java.util.logging,logback,log4j等.slf4j使用户可以在运行时嵌入他们想使用的日志框架.从名字中可以看出,它其实使用的是facade设计模式来实现的. 使用slf4j,只有一个强制性的依赖,就是slf4j-api-x.x.x.jar,我们在编写代码的时

log4j入门教程

Log4e是一个免费的Eclipse Plugin.其下载地址为:http://log4e.jayefem.de/index.php/Download 在Eclipse的安装目录下,找到对应的plugins和features文件夹,将解压后得到的两个文件plugins和features下对应的文件拷贝到相应的目录下. 重启Eclispse后,就可以使用Log4e插件了,如果看不到插件,把Eclipse安装目录下的configuration/org.eclipse.update/目录整个删除,重启

springCloud(11):使用Hystrix实现微服务的容错处理-简介与实现

一.问题引入 如果服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,直到提供者响应或超时.在高负载场景下,如果不作任何处理,此类问题可能会导致服务消费者的资源耗尽甚至整个系统的崩溃. 1.1.雪崩效应 微服务架构的应用系统通常包含多个服务层.微服务之间通过网络进行通信,从而支撑起整个应用系统,因此,微服务之间难免存在依赖关系.任何微服务都并非100%可用,网络往往也很脆弱,因此难免有些请求会失败. 我们通常把"基础服务故障"导致"级联故障"的现象称为雪

JEESZ分布式框架简介---技术介绍文档

摘要: Jeesz主要定位于互联网企业架构,已内置企业信息化系统的基础功能和高效的代码生成工具,包括:系统权限组件.数据权限组件.数据字典组件.核心工具 组件.视图操作组件.工作流组件.代码生成等.采用分层设计.双重验证.提交数据安全编码.密码加密.访问验证.数据权限验证. 介绍 1.      项目核心代码结构截图 <modules>        <!-- jeesz 工具jar -->        <module>jeesz-utils</module&g

log4j2简介

前言 在介绍log4j2之前先简单介绍一下Log4j.Logback.SFL4J.JUL.JCL这些东西是什么以及有啥作用. Log4j是什么地球人应该都知道.log4j是Log for Java的简称,是Apache的一个开源子项目,有7种不同的日志级别,从低到高一次为TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF,支持properties和xml两种配置文件,包含Logger.appender.Layout三个主要组件. SFL4J是Si

logback简介

转载:http://aub.iteye.com/blog/1101222 logback 简介 Ceki Gülcü在Java日志领域世界知名.他创造了Log4J ,这个最早的Java日志框架即便在JRE内置日志功能的竞争下仍然非常流行.随后他又着手实现SLF4J 这个"简单的日志前端接口(Fa?ade)"来替代Jakarta Commons-Logging . LOGBack,一个"可靠.通用.快速而又灵活的Java日志框架". 要在工程里面使用logback需要

thrift学习笔记(一) thrift简介及第一个helloword程序

简介 facebook开源的RPC框架,秉承了Facebook一贯的只管拉屎不管擦屁股的作风. Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 等等编程语言间无缝结合的.高效的服务. Thrift最初由facebook开

Apache Shiro 简介(转)

使用 Apache Shiro 为 web 应用程序进行用户身份验证 Shiro 是一个 Apache Incubator 项目,旨在简化身份验证和授权.在本文中,了解 Apache Shiro 并通过示例来在一个 Groovy web 应用程序中尝试使用 Shiro 进行身份验证和授权. Apache Shiro 是一个框架,可用于身份验证和授权.本文提供了几个示例用来展示如何在 Java™ 应用程序中使用 Shiro 并给出了如何在一个 Grails web 应用程序中使用它的概述.为了从本

Spring IO platform 简介

前提:熟悉Spring基础知识. 简介:Spring IO Platform将 the core Spring APIs 集成到一个Platform中.它提供了Spring portfolio中的大量项目以及它们依赖的版本.--经过测试,工作完好. 另外,Spring IO Platform 基于 Spring Boot. platform-reference.pdf http://docs.spring.io/platform/docs/current/reference/html/getti