配置文件主要結構如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appender></appender>
<!--looger可以有0個或多個-->
<logger></logger>
<!--可以有0個或1個-->
<root></root>
</configuration>
1.appender節點(輸出源,日志輸出類型)
<appender>
是<configuration>
的子節點,是負責寫日志的組件。appender有兩個必要屬性name、class 。name指定appender的名稱,class指定appender的全限定名。
class,主要包括:
ch.qos.logback.core.ConsoleAppender 控制台輸出
ch.qos.logback.core.FileAppender 文件輸出
ch.qos.logback.core.RollingFileAppender 文件滾動輸出
以下對每個類進行分析:
ConsoleAppender 把日志輸出到控制台
有如下節點:
<encoder> : 對日志進行格式化。
<target> : 字符串System.out 或者 System.err, 默認 System.out;
<configuration>
<appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date [%thread] %-5level %logger - %message%newline</pattern>
</encoder>
</appender>
FileAppender 把日志添加到文件
有如下節點:
<file>:被寫入的文件名,可以是相對目錄 , 也可以是絕對目錄 , 如果目錄不存在則會自動創建。
<append>:如果是true , 日志被追加到文件結尾 , 如果是false,清空現存文件 , 默認是true。
<encoder>
:對日志進行格式化,具體的轉換符說明請參見 logback中文網
<appender name="file_out" class="ch.qos.logback.core.FileAppender">
<file>logs/debug.log</file>
<encoder>
<pattern>%date [%thread] %-5level %logger - %message%newline</pattern>
</encoder>
</appender>
rollingFileAppender 滾動記錄錄文件
先將日志記錄到指定文件,當符合某種條件時,將日志記錄到其他文件,有如下節點:
<file>:被寫入的文件名,可以是相對目錄,也可以解決目錄,如果目錄不存在則自動創建。
<append>:如果是true,日志被追加到文件結尾,如果是false,清空現存文件,默認是true。
<encoder>:對日志進行格式化。
<rollingPolicy>:當發生滾動時,決定 RollingFileAppender 的行為,涉及文件移動和重命名。
rollingPolicy
TimeBaseRollingPolicy :最常用的滾動策略,根據時間來制定滾動策略,即負責滾動也負責觸發滾動。有如下節點;
<fileNamePattern>:必要節點,包含文件及“%d” 轉換符,“%d”可以包含一個java.text.SimpleDateFormat 制定的時間格式,如:%d{yyyy-MM},如果直接使用%d ,默認格式是 yyyy-MM-dd。
<maxHistory>:可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件,假設設置每個月滾動,且<maxHistory> 是 6,則只保存最近6個月的文件,刪除之前的舊文件,注意:刪除舊文件是哪些為了歸檔而創建的目錄也會被刪除。
<filenamePattern>:必須包含“%i” 例如:設置最小值,和最大值分別為1和2,命名模式為 log%i.log,會產生歸檔文件log1.log和log2.log,還可以指定文件壓縮選項,例如:log%i.log.gz 或者 log%i.log.zip
triggeringPolicy:告知RollingFileAppender,激活RollingFileAppender滾動。
<appender name="errorAppender" class="ch.qos.logback.core.RollingFileAppender">
<file>logs/error.log</file>
<!-- 設置滾動策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--設置日志命名模式-->
<fileNamePattern>errorFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--最多保留30天log-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<!-- 超過150MB時,觸發滾動策略 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>150</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d [%p] %-5level %logger - %msg%newline</pattern>
</encoder>
</appender>
2.logger節點(控制日志輸出級別和要打印的路徑)
logger是<configuration>
的子節點,來設置某一個包或者具體的某一個類的日志打印級別,以及指定當前這個包或類的輸出類型,也就是上邊的<appender>
標簽中的name。logger僅有一個name屬性,兩個可選屬性 level/addtivity。
-
name:用來指定受此loger約束的某一個包或者具體的某一個類,要寫全類名。
-
level:用來設置打印級別,大小寫無關。可選值有TRACE、DEBUG、INFO、WARN、ERROR、ALL和OFF。還有一個特俗值INHERITED 或者 同義詞NULL,代表強制執行上級的級別。如果未設置此屬性,那么當前logger將會繼承上級的級別。
-
addtivity:是否向上級logger傳遞打印信息,默認為true,這個上下級就是在name上來區分的,name是java中的包或者全類名;
-
<logger>
可以包含零個或多個<appender-ref>
元素,表示這個appender將會添加到logger。
<logger name="com.example" level="info">
<!--這里的appender-ref中的ref就是指定上邊定義的apperder中的name-->
<appender-ref ref = "console_out"/>
</logger>
3.root節點(和上邊logger一樣)
其實就是<logger name="root"></logger>
。該元素有一個level屬性,沒有name屬性,因為已經被命名 為root。Level屬性的值大小寫無關,其值為下面其中一個字符串:TRACE、DEBUG、INFO、 WARN、ERROR、ALL 和 OFF。如果 root 元素沒 有引用任何 appender,就會失去所有 appender。
<root level="INFO">
<appender-ref ref="console_out"/>
</root>
對於<logger>和<root>
的區別,參見logback 配置詳解(一)——logger、root