One - One Code All

Blog Content

slf4j-api和slf4j-simple的关系,启动报错Failed to load class org.slf4j.impl.StaticLoggerBinder

Java   2016-05-30 18:30:37

idea springboot启动报SLF4J:Failed to load class “org.slf4j.impl.StaticLoggerBinder”。

一查,idea自动给推荐的slf4j-api包。换成slf4j-simple正常。


       org.slf4j
       slf4j-api
       1.7.21



       org.slf4j
       slf4j-simple
       1.7.21

slf4j-api包 是日志的接口,log4j,logback等等才是日志的真正实现。

slf4j-simple包 是slf4j提供的一个简单实现 。

当我们调用接口时,接口的工厂会自动寻找恰当的实现,返回一个实现的实例给我提供服务。


重要的类和接口

最关键的2个接口,分别是Logger和ILoggerFactory。最关键的类,是LoggerFactory


Logger接口:用来记录日志,提供了打印各种级别日志的功能。

实现类有NOPLogger 和 SimpleLogger等,NOPLogger如同它的名字一样:什么都不做 ,SimpleLogger在slf4j-simple包中,可通过配置日志输出方式,显示格式,日志级别等来打印日志。


ILoggerFactory接口:通过他来直接获取Logger。

LoggerFactory 类:这个类是获取Logger的门面,他的内部是通过ILoggerFactory来获取Logger的


LoggerFactory 类详解

LoggerFactory使用getLogger()方法获取Logger对象。

public class Main {
    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(Main.class);

        logger.debug("debug");
        logger.info("info");
    }
}

// getLogger()是重载方法,可以接受一个字符串或class类型,接受字符串参数的方法如下所示:
 public static Logger getLogger(String name) {
     ILoggerFactory iLoggerFactory = getILoggerFactory();//***
     return iLoggerFactory.getLogger(name);
 }


//进入getILoggerFactory()方法,这个类简化如下:

 public static ILoggerFactory getILoggerFactory() {
     //使用加锁的方式保证仅仅一次初始化(具体看源码)
     performInitialization();
     //使用StaticLoggerBinder类获取真正的日志工厂,将在下一节介绍   
     return StaticLoggerBinder.getSingleton().getLoggerFactory();

 }



上一篇:IDEA 导入多个Module,多个Module在同一个Project 下显示
下一篇:idea,lambda表达式编译不支持 lambda expression are not supported at this lanague level

The minute you think of giving up, think of the reason why you held on so long.