• 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

  • 相关阅读:
    读取Excel还用POI?试试这款开源工具
    Maven optional 关键字透彻图解
    Java 8 Stream Api 中的 peek 操作
    Lombok 使用详解,简化Java编程
    C# 基础知识系列- 16 开发工具篇
    C# 基础知识系列- 15 异常处理篇
    C# 基础知识系列- 14 IO篇 流的使用
    Java Spring Cloud 实战之路-01 框架选型
    C# 基础知识系列- 14 IO篇 文件的操作
    C# 基础知识系列- 14 IO篇 文件的操作
  • 原文地址:https://www.cnblogs.com/charlexu/p/4589080.html
Copyright © 2020-2023  润新知