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(); }