1. 程式人生 > >LoggerFactory.getLogger用法

LoggerFactory.getLogger用法

tee ring 代碼 zed cep state all sin 根據

簡述:

使用指定類初始化日誌對象,在日誌輸出的時候,可以打印出日誌信息所在類

如: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接口中規定了日誌的輸出的方法,根據相應的參數需要設置就可以在控制臺看到輸出的日誌信息了。

LoggerFactory.getLogger用法