1、Logback為取代log4j而生
Logback整體流程:Logger 產(chǎn)生日志信息;Layout修飾這條msg的顯示格式;Filter過濾顯示的內(nèi)容;Appender具體的顯示,即保存這日志信息的地方。
Logback是由log4j創(chuàng)始人Ceki Gülcü設(shè)計(jì)的又一個開源日志組件。logback當(dāng)前分成三個模塊:logback-core,logback- classic和logback-access。
2、Logback的核心對象:Logger、Appender、Layout
Logback主要建立于Logger、Appender和Layout 這三個類之上。
Logger:日志的記錄器,把它關(guān)聯(lián)到應(yīng)用的對應(yīng)的context上后,主要用于存放日志對象,也可以定義日志類型、級別。Logger對象一般多定義為靜態(tài)常量,如:
package com.logs;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
? public class MyApp {
? ? ?final static Logger logger = LoggerFactory.getLogger("MyApp.class");
? ? public static void main(String[] args) {
? ? ? logger.trace("trace");
? ? ? logger.debug("debug str");
? ? ? logger.info("info str");
? ? ? logger.warn("warn");
? ? ? logger.error("error");
? ? }
}
Appender:用于指定日志輸出的目的地,目的地可以是控制臺、文件、遠(yuǎn)程套接字服務(wù)器、 MySQL、 PostreSQL、Oracle和其他數(shù)據(jù)庫、 JMS和遠(yuǎn)程UNIX Syslog守護(hù)進(jìn)程等。
Layout:負(fù)責(zé)把事件轉(zhuǎn)換成字符串,格式化的日志信息的輸出。具體的Layout通配符,可以直接查看幫助文檔。
3、Level 有效級別
Logger可以被分配級別。級別包括:TRACE、DEBUG、INFO、WARN和ERROR,定義于ch.qos.logback.classic.Level類。程序會打印高于或等于所設(shè)置級別的日志,設(shè)置的日志等級越高,打印出來的日志就越少。如果設(shè)置級別為INFO,則優(yōu)先級高于等于INFO級別(如:INFO、 WARN、ERROR)的日志信息將可以被輸出,小于該級別的如DEBUG將不會被輸出。為確保所有l(wèi)ogger都能夠最終繼承一個級別,根logger總是有級別,默認(rèn)情況下,這個級別是DEBUG。
4、 三值邏輯
Logback的過濾器基于三值邏輯(ternary logic),允許把它們組裝或成鏈,從而組成任意的復(fù)合過濾策略。過濾器很大程度上受到Linux的iptables啟發(fā)。這里的所謂三值邏輯是說,過濾器的返回值只能是ACCEPT、DENY和NEUTRAL的其中一個。
如果返回DENY,那么記錄事件立即被拋棄,不再經(jīng)過剩余過濾器;
如果返回NEUTRAL,那么有序列表里的下一個過濾器會接著處理記錄事件;
如果返回ACCEPT,那么記錄事件被立即處理,不再經(jīng)過剩余過濾器。
5、Filter 過濾器
Logback-classic提供兩種類型的過濾器:常規(guī)過濾器和TuroboFilter過濾器。Logback整體流程:Logger 產(chǎn)生日志信息;Layout修飾這條msg的顯示格式;Filter過濾顯示的內(nèi)容;Appender具體的顯示,即保存這日志信息的地方。
6、具體使用案例
Java項(xiàng)目中一般都會應(yīng)用比如struts、spring、hibernate等開源框架,而這些框架很多是應(yīng)用log4j記錄日志的,所以我們考慮用log4j+slf4j+ logback 。這樣我們需要導(dǎo)入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中的特殊字符需要導(dǎo)入其依賴包janino-2.3.2.jar。其logback.xml