java日誌框架系列(4):logback框架xml配置文件語法

1.xml配置文件語法

因爲logback配置文件語法特別靈活,所以沒法用DTD或schema進行定義。html

1.配置文件基本結構

 配置文件基本結構:以<configuration>標籤開頭,包含0或多個<appender>子標籤,包含0或多個<logger>標籤,最多隻能有一個<root>標籤。java

 

注意數組

從 logback 0.9.17 版起,標籤名不區分大小些。好比,<logger>、<Logger>和<LOGGER>都是合法元素且表示同一個意思。按照 隱式規則標籤名除了首字母外要區分大小寫。所以,<xyz>與<Xyz>等價,但不等價於<xYz>。 隱式規則通常遵循 Java 世界裏經常使用的駝峯命名規則。由於很難肯定一個標籤何時與顯式動做相關,何時又與隱式動做相關,因此很難說 XML 標記是不是大小寫敏感。若是你不肯定標記名的大小寫,就用駝峯命名法,基本不會錯。

2.配置logger

配置Logger使用<logger>標籤。這裏的logger指的是普通logger,並不是根logger。app

1.logger標籤屬性

logger標籤有3個屬性:name、level、additivity。框架

其中name是必須的,level與additivity屬性是可選的。post

level屬性:設置分配的記錄級別。url

additivity屬性:表示appender的疊加性,默認值爲true。具體含義請參考java日誌框架系列(2):logback框架詳解spa

level的值:TRACE、DEBUG、INFO、WARN、ERROR、ALL 和 OFF。還能夠是一個特殊的字符串「INHERITED」或其同義詞「NULL」,表示強制繼承上級的級別。debug

2.logger標籤的子標籤

 logger標籤能夠包含的0或多個<appender-ref>子標籤,表示這個<appender-ref>子標籤所指的appender會被添加到這個logger中。
<appender-ref>標籤只有一個屬性ref,值爲appender的name屬性。
<appender-ref ref="appenderName"></appender-ref>

3.配置根logger

<root>標籤配置根 logger。

1.root標籤的屬性

<root>標籤只有一個 level 屬性沒有 name 屬性,由於已經被命名爲「ROOT」,也沒有additivity屬性;由於根logger已是頂級logger了,沒有上級logger
level屬性值:TRACE、DEBUG、INFO、WARN、ERROR、ALL 和 OFF。 注意不能設置爲「INHERITED」 或「NULL。屬性的值大小寫無關。

2.root標籤的包含的子標籤

<logger>元素能夠包含零個或多個<appender-ref>元素。與<logger>元素相似,聲明<root>元素後,會先關閉而後移除所有當前 appender,只引用聲明瞭的 appender。若是 root 元素沒有引用任何 appender,就會失去全部 appender。

 4.配置appender

Appender 用<appender>標籤配置。

1.appender標籤的屬性

屬性: name 和 class。
name 屬性指定 appender 的名稱,class 屬性指定 appender 類的全限定名。

2.appender標籤的子標籤

子標籤種類:<layout>標籤、<encoder>標籤、<filter>標籤。這三個標籤都是可選的(0或多個)。當appender指向文件時,還能夠包含<file>標籤,指定寫入的文件名。日誌

除了這三個經常使用元素以外,還能夠包含 appender 類的任意數量的 javabean
屬性。下圖演示了經常使用結構,注意對 javabean 屬性的支持在圖中不可見。

 

 1.子標籤<layout>

必要屬性:class,表示被實例化的Layout類的全限定名。Layout類負責把事件轉換爲字符串。當Layout指是PatternLayout時,能夠省略class屬性。

2.子標籤<encoder>

必要屬性:class,表示被實例化的Encoder類的全限定名。Encoder 負責兩件事,一是把事件轉換爲字節數組,二是把字節數組寫入輸出流。當Layout指是PatternLayoutEncoder時,能夠省略class屬性。

3.子標籤<filter>

必要屬性:class,表示被實例化的Filter類的全限定名。

 5.appender累積

默認狀況下,appender是累積的,logger會把記錄輸出到它自身和全部祖先的appender。所以,把一個appender關聯到多個logger會致使重複輸出。

解決方法:設置logger的additivity屬性爲false。

 

 6.設置上下文(LoggerContext)名稱

每一個logger都會關聯到logger上下文。默認狀況下,logger上下文名稱爲default。

<contextName>標籤:設置logger上下文名稱。能夠方便區分來自不一樣應用程序的記錄。

 

 注意:一旦設置logger上下文名稱後就不能更改了。

在layout模式裏添加「%contextName」就會輸出上下文名稱。

7.變量替換

什麼意思呢,舉個例子。當你須要將記錄輸出到文件中的時候,在<appender>中須要用<file>標籤指定文件名(一般須要使用絕對路徑名),這樣固定文件路徑可能比較死板,那麼還有一種方式,就是經過變量來指定文件路徑。

1.簡單變量替換

在配置文件中的<configuration>裏使用<property>標籤設置變量,在<file>標籤中使用變量,經過環境變量指定路徑就能夠,file標籤中結合變量與文件名組成文件的完整路徑名稱。以下圖:

 

 2.系統變量替換

 

 示例1:系統變量替換

 

 當須要不少變量時,更方便的作法是在一個單獨文件裏聲明全部變量。以下示例2

示例2:

<configuration> 
  <property file="src/main/java/chapters/configuration/variables1.properties" />   <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${USER_HOME}/myApp.log</file>
    <encoder>
      <pattern>%msg%n</pattern>     </encoder>   </appender>
  <root level="debug">
    <appender-ref ref="FILE" />   </root> </configuration>
這個配置文件包含對文件「variables1.properties」的引用,該文件裏的變量會被讀入logback 配置文件的上下文裏。
相關文章
相關標籤/搜索