java日誌框架系列(5):logback框架appender詳解

1.appender

1.什麼是appender

Appender 是負責寫記錄事件的組件。 Appender 必須實現接口「ch.qos.logback.core.Appender」。該接口的重要方法總結以下: 

 

 

 

 2.AppenderBase

public synchronized void doAppend(E eventObject) {
// prevent re-entry.
if (guard) {
return; }
try {
guard = true;
if (!this.started) {
if (statusRepeatCount++ < ALLOWED_REPEATS) {
addStatus(new WarnStatus(
"Attempted to append to non started appender ["
+ name + "].", this));
}
return; }
if (getFilterChainDecision(eventObject) == FilterReply.DENY) 
{
return; }
// ok, we now invoke derived class' implementation of append
this.append(eventObject);
} catch (Exception e) {
if (exceptionCount++ < ALLOWED_REPEATS) {
addError("Appender [" + name + "] failed to append.", e);
}
} finally {
guard = false; } }

經過代碼能夠知道AppenderBase類是的doAppender()是同步線程安全的;並非全部時候都須要同步,所以當不須要同步的時候可使用UnsynchronizedAppenderBase類。java

3. logback-core

logback-core模塊是logback的基礎。下面講解一下能夠直接使用的appender。安全

1.logback-core模塊中的appender

logback-core模塊中的appender種類:OutputStreamAppender、ConsoleAppender、FileAppender、RollingFileAppender。網絡

你有沒有發現:logback-core中的appender的目的地都是本地啊,那有沒有能夠發送到網絡上的appender呀,固然有,在logback-classic模塊中,下一節介紹。app

這些appender之間的關係以下所示:this

 

1.OutputStreamAppender講解

OutputStreamAppender 把事件添加到 java.io.OutputStream該類提供其餘 appender 所需的基本服務。用戶一般不直接實例化 OutputStreamAppender 對象。
因爲 java.io.OutputStream通常沒法被方便地映射到字符串,因此沒法在配置文件裏指定目標 OutputStream 對象。簡而言之,你 不能在配置文件裏配置 OutputStreamAppender。但這不是說 OutputStreamAppender沒有配置屬性。它的屬性以下:

 2.ConsoleAppender講解

ConsoleAppender 把事件添加到控制檯,更準確地說是 System.out 或 System.err,默認爲前者。ConsoleAppender 按照用戶指定的 encoder 對事件進行格式化。

 這些屬性是須要配置的,所以咱們能夠經過在xml配置文件中的<appender>標籤中建立以屬性名爲標籤名的標籤,併爲這些標籤進行配置。spa

注意<appender>中不一樣的class屬性值代表使用不一樣的目的地,所以會有不一樣的參數,從而表現出在配置文件中的標籤有所差別線程

 3.FileAppender講解

FileAppender 是 OutputStreamAppender 的子類, 把記錄事件添加到文件。目標文件經過File 選項指定。若是文件已經存在,則 根據 Append 屬性追加或清空文件

 

這些屬性是須要配置的,所以咱們能夠經過在xml配置文件中的<appender>標籤中建立以屬性名爲標籤名的標籤,併爲這些標籤進行配置。3d

注意<appender>中不一樣的class屬性值代表使用不一樣的目的地,所以會有不一樣的參數,從而表現出在配置文件中的標籤有所差別。code

 4.RollingFIleAppender講解

RollingFileAppender 繼承 FileAppender,可以滾動記錄文件。
滾動記錄文件:RollingFileAppender能先記錄到文件「log.txt」,而後當符合某個條件時,變成記錄到其餘文件。
1.實現滾動記錄原理
RollingFileAppender有兩個重要組件,RollingPolicy、TriggerPolicy。
RollingPolicy:負責滾動
TriggerPolicy:決定是否以及什麼時候滾動。
RollingFileAppender要想實現滾動功能,必須同時設置具體的RollingPolicy類與具體的TriggerPolicy類。若是某個類A實現了RollingPolicy與TriggerPolicy,那麼只須要設置類A就能夠了。
rollingPolicy屬性值的類型有:FixedWindowRollingPolicy類、TimeBasedRollingPolicy類(經常使用)。FixedWindowRollingPolicy,TimeBasedRollingPolicy 支持自動壓縮文件

這些屬性是須要配置的,所以咱們能夠經過在xml配置文件中的<appender>標籤中建立以屬性名爲標籤名的標籤,併爲這些標籤進行配置。xml

注意<appender>中不一樣的class屬性值代表使用不一樣的目的地,所以會有不一樣的參數,從而表現出在配置文件中的標籤有所差別。

1.最受歡迎的滾動策略TimeBaseRollingPolicy
TimeBaseRollingPolicy:最流行的滾動策略。根據時間來制定滾動策略。因爲TimeBaseRollingPolicy實現了RollingPolicy接口和TriggeringPolicy接口,所以TimeBaseRollingPolicy即負責滾動也負責觸發條件。
 屬性:fileNamePattern(必須有)和maxHistory(可選的)。

 

 下面講解一下fileNamePattern的部分值及做用:

注意:全部「\」和「/」都被解釋爲目錄分隔符。任何須要的目錄都會被建立。因此你能夠輕鬆地把記錄文件放到不一樣的目錄。 

 

4.logback-classic

 

 

  在logback-classic模塊中也存在一些appender,而且這些appender的目的地不是本地。下面詳細瞭解一下這些appender。

logback-classic模塊中的appender分類:SocketAppender、DBAppender、SMTPAppender、SyslogAppender、SiftingAppender以及基於JMS的兩種Appender(JMSTopicAppender和JMSQueueAppender,他們繼承自JMSAppenderBase類);提供了總共7種appender;另外還能夠自定義appender,須要經過繼承AppenderBase來實現自定義的appender。

相關文章
相關標籤/搜索