Logback是由log4j創始人Ceki Gülcü設計的又一個開源日誌組件。logback當前分紅三個模塊:logback-core,logback- classic和logback-access。spring
二、Logback的核心對象:Logger、Appender、Layout數據庫
Logback主要創建於Logger、Appender 和 Layout 這三個類之上。
apache
Logger:日誌的記錄器,把它關聯到應用的對應的context上後,主要用於存放日誌對象,也能夠定義日誌類型、級別。Logger對象通常多定義爲靜態常量,如:api
1 package com.logs; 2 3 import org.slf4j.Logger; 4 import org.slf4j.LoggerFactory; 5 6 public class MyApp { 7 final static Logger logger = LoggerFactory.getLogger("MyApp.class"); 8 public static void main(String[] args) { 9 10 logger.trace("trace");11 logger.debug("debug str");12 logger.info("info str");13 logger.warn("warn");14 logger.error("error");15 }16 }
Appender:用於指定日誌輸出的目的地,目的地能夠是控制檯、文件、遠程套接字服務器、 MySQL、 PostreSQL、Oracle和其餘數據庫、 JMS和遠程UNIX Syslog守護進程等。服務器
Layout:負責把事件轉換成字符串,格式化的日誌信息的輸出。具體的Layout通配符,能夠直接查看幫助文檔。框架
三、Level 有效級別lua
Logger能夠被分配級別。級別包括:TRACE、DEBUG、INFO、WARN和ERROR,定義於ch.qos.logback.classic.Level類。程序會打印高於或等於所設置級別的日誌,設置的日誌等級越高,打印出來的日誌就越少。若是設置級別爲INFO,則優先級高於等於INFO級別(如:INFO、 WARN、ERROR)的日誌信息將能夠被輸出,小於該級別的如DEBUG將不會被輸出。爲確保全部logger都可以最終繼承一個級別,根logger老是有級別,默認狀況下,這個級別是DEBUG。spa
四、 三值邏輯hibernate
Logback的過濾器基於三值邏輯(ternary logic),容許把它們組裝或成鏈,從而組成任意的複合過濾策略。過濾器很大程度上受到Linux的iptables啓發。這裏的所謂三值邏輯是說,過濾器的返回值只能是ACCEPT、DENY和NEUTRAL的其中一個。
若是返回DENY,那麼記錄事件當即被拋棄,再也不通過剩餘過濾器;
若是返回NEUTRAL,那麼有序列表裏的下一個過濾器會接着處理記錄事件;
若是返回ACCEPT,那麼記錄事件被當即處理,再也不通過剩餘過濾器。
五、Filter 過濾器
Logback-classic提供兩種類型的過濾器:常規過濾器和TuroboFilter過濾器。Logback總體流程:Logger 產生日誌信息;Layout修飾這條msg的顯示格式;Filter過濾顯示的內容;Appender具體的顯示,即保存這日誌信息的地方。
六、具體使用案例
Java項目中通常都會應用好比struts、spring、hibernate等開源框架,而這些框架不少是應用log4j記錄日誌的,因此咱們考慮用log4j + slf4j + logback 。這樣咱們須要導入log4j-over-slf4j-1.6.4.jar 、logback-classic-1.0.1.jar 、logback-core-1.0.1.jar 、slf4j-api-1.6.4.jar ,若是你要用到EvaluatorFilter過濾器來過濾日誌Msg中的特殊字符須要導入其依賴包 janino-2.3.2.jar。其logback.xml
Logback淺析 一、Logback爲取代log4j而生 Logback是由log4j創始人Ceki Gülcü設計的又一個開源日誌組件。logback當前分紅三個模塊:logback-core,logback- classic和logback-access。 二、Logback的核心對象:Logger、Appender、Layout Logback主要創建於Logger、Appender 和 Layout 這三個類之上。 Logger:日誌的記錄器,把它關聯到應用的對應的context上後,主要用於存放日誌對象,也能夠定義日誌類型、級別。Logger對象通常多定義爲靜態常量,如: 1 package com.logs; 2 3 import org.slf4j.Logger; 4 import org.slf4j.LoggerFactory; 5 6 public class MyApp { 7 final static Logger logger = LoggerFactory.getLogger("MyApp.class"); 8 public static void main(String[] args) { 9 10 logger.trace("trace");11 logger.debug("debug str");12 logger.info("info str");13 logger.warn("warn");14 logger.error("error");15 }16 } Appender:用於指定日誌輸出的目的地,目的地能夠是控制檯、文件、遠程套接字服務器、 MySQL、 PostreSQL、Oracle和其餘數據庫、 JMS和遠程UNIX Syslog守護進程等。 Layout:負責把事件轉換成字符串,格式化的日誌信息的輸出。具體的Layout通配符,能夠直接查看幫助文檔。 三、Level 有效級別 Logger能夠被分配級別。級別包括:TRACE、DEBUG、INFO、WARN和ERROR,定義於ch.qos.logback.classic.Level類。程序會打印高於或等於所設置級別的日誌,設置的日誌等級越高,打印出來的日誌就越少。若是設置級別爲INFO,則優先級高於等於INFO級別(如:INFO、 WARN、ERROR)的日誌信息將能夠被輸出,小於該級別的如DEBUG將不會被輸出。爲確保全部logger都可以最終繼承一個級別,根logger老是有級別,默認狀況下,這個級別是DEBUG。 四、 三值邏輯 Logback的過濾器基於三值邏輯(ternary logic),容許把它們組裝或成鏈,從而組成任意的複合過濾策略。過濾器很大程度上受到Linux的iptables啓發。這裏的所謂三值邏輯是說,過濾器的返回值只能是ACCEPT、DENY和NEUTRAL的其中一個。 若是返回DENY,那麼記錄事件當即被拋棄,再也不通過剩餘過濾器; 若是返回NEUTRAL,那麼有序列表裏的下一個過濾器會接着處理記錄事件; 若是返回ACCEPT,那麼記錄事件被當即處理,再也不通過剩餘過濾器。 五、Filter 過濾器 Logback-classic提供兩種類型的過濾器:常規過濾器和TuroboFilter過濾器。Logback總體流程:Logger 產生日誌信息;Layout修飾這條msg的顯示格式;Filter過濾顯示的內容;Appender具體的顯示,即保存這日誌信息的地方。