因爲logback配置文件語法特別靈活,所以沒法用DTD或schema進行定義。html
配置文件基本結構:以<configuration>標籤開頭,包含0或多個<appender>子標籤,包含0或多個<logger>標籤,最多隻能有一個<root>標籤。java
注意:數組
配置Logger使用<logger>標籤。這裏的logger指的是普通logger,並不是根logger。app
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
<appender-ref ref="appenderName"></appender-ref>
子標籤種類:<layout>標籤、<encoder>標籤、<filter>標籤。這三個標籤都是可選的(0或多個)。當appender指向文件時,還能夠包含<file>標籤,指定寫入的文件名。日誌
1.子標籤<layout>
必要屬性:class,表示被實例化的Layout類的全限定名。Layout類負責把事件轉換爲字符串。當Layout指是PatternLayout時,能夠省略class屬性。
2.子標籤<encoder>
必要屬性:class,表示被實例化的Encoder類的全限定名。Encoder 負責兩件事,一是把事件轉換爲字節數組,二是把字節數組寫入輸出流。當Layout指是PatternLayoutEncoder時,能夠省略class屬性。
3.子標籤<filter>
必要屬性:class,表示被實例化的Filter類的全限定名。
默認狀況下,appender是累積的,logger會把記錄輸出到它自身和全部祖先的appender。所以,把一個appender關聯到多個logger會致使重複輸出。
解決方法:設置logger的additivity屬性爲false。
每一個logger都會關聯到logger上下文。默認狀況下,logger上下文名稱爲default。
<contextName>標籤:設置logger上下文名稱。能夠方便區分來自不一樣應用程序的記錄。
注意:一旦設置logger上下文名稱後就不能更改了。
在layout模式裏添加「%contextName」就會輸出上下文名稱。
什麼意思呢,舉個例子。當你須要將記錄輸出到文件中的時候,在<appender>中須要用<file>標籤指定文件名(一般須要使用絕對路徑名),這樣固定文件路徑可能比較死板,那麼還有一種方式,就是經過變量來指定文件路徑。
在配置文件中的<configuration>裏使用<property>標籤設置變量,在<file>標籤中使用變量,經過環境變量指定路徑就能夠,file標籤中結合變量與文件名組成文件的完整路徑名稱。以下圖:
示例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>