簡述:
使用指定類初始化日志對象,在日志輸出的時候,可以打印出日志信息所在類
如: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接口中規定了日志的輸出的方法,根據相應的參數需要設置就可以在控制台看到輸出的日志信息了。