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類。

3. logback-core

logback-core模塊是logback的基礎。下面講解一下可以直接使用的appender。

1.logback-core模塊中的appender

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

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

這些appender之間的關系如下所示:

 

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>標簽中創建以屬性名為標簽名的標簽,並為這些標簽進行配置。

注意<appender>中不同的class屬性值表明使用不同的目的地,因此會有不同的參數,從而表現出在配置文件中的標簽有所差異

 3.FileAppender講解

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

 

這些屬性是需要配置的,因此我們可以通過在xml配置文件中的<appender>標簽中創建以屬性名為標簽名的標簽,並為這些標簽進行配置。

注意<appender>中不同的class屬性值表明使用不同的目的地,因此會有不同的參數,從而表現出在配置文件中的標簽有所差異。

 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>標簽中創建以屬性名為標簽名的標簽,並為這些標簽進行配置。

注意<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。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM