LoggerFactory.getLogger用法

简述:

使用指定类初始化日志对象,在日志输出的时候,可以打印出日志信息所在类

如:Logger logger = LoggerFactory.getLogger(com.lz.Test.class);
       logger.debug("日志信息");
       将会打印出: com.lz.Test : 日志信息

代码分析:

由Logger的名称可以知道这句的意思是用Logger工厂获取Logger实例,但是不明白其中的原理,看了看源码:

LoggerFactory中的getLogger方法,返回一个以name命名的静态绑定的实例,而这个name一般以Logger实例所在的类命名,如通过类名.Class.getName()获取。

1 public static Logger getLogger(String name) {  
2 
3       ILoggerFactory iLoggerFactory = getILoggerFactory();  
4 
5     return iLoggerFactory.getLogger(name);  
6 
7   } 
 

ILoggerFactory的接口实例在编译时内部绑定LoggerFactory,这个接口中只有一个public Logger getLogger(String name)方法,根据参数名称返回适当的实例

看看这个getILoggerFactory()方法

 1 public static ILoggerFactory getILoggerFactory() {  
 2 
 3   if (INITIALIZATION_STATE == UNINITIALIZED) {  
 4 
 5         INITIALIZATION_STATE = ONGOING_INITIALIZATION;  
 6 
 7         performInitialization();  
 8 
 9     }  
10 
11   switch (INITIALIZATION_STATE) {  
12 
13       case SUCCESSFUL_INITIALIZATION:  
14 
15         return StaticLoggerBinder.getSingleton().getLoggerFactory();  
16 
17       case NOP_FALLBACK_INITIALIZATION:  
18 
19         return NOP_FALLBACK_FACTORY;  
20 
21       case FAILED_INITIALIZATION:  
22 
23         throw new IllegalStateException(UNSUCCESSFUL_INIT_MSG);  
24 
25       case ONGOING_INITIALIZATION:  
26 
27         // support re-entrant behavior.  
28 
29         // See also http://bugzilla.slf4j.org/show_bug.cgi?id=106  
30 
31         return TEMP_FACTORY;  
32 
33         }  
34 
35       throw new IllegalStateException("Unreachable code");  
36 
37  }  
 

很明显这是返回ILoggerFactory的实例,用于调取getLogger方法。在Logger接口中规定了日志的输出的方法,根据相应的参数需要设置就可以在控制台看到输出的日志信息了。

原文地址:https://www.cnblogs.com/lizhen-home/p/7655869.html