logback.xml常用配置詳解
阿新 • • 發佈:2021-05-10
1、根節點,包含下面三個屬性:
-
scan: 當此屬性設定為true時,配置檔案如果發生改變,將會被重新載入,預設值為true。
-
scanPeriod: 設定監測配置檔案是否有修改的時間間隔,如果沒有給出時間單位,預設單位是毫秒。當scan為true時,此屬性生效。預設的時間間隔為1分鐘。
-
debug: 當此屬性設定為true時,將打印出logback內部日誌資訊,實時檢視logback執行狀態。預設值為false。
例如:
<configuration scan="true" scanPeriod="60 seconds" debug= "false">
<!--其他配置省略-->
</configuration>
2、子節點,用來設定上下文名稱: 每個logger都關聯到logger上下文,預設上下文名稱為default。但可以使用設定成其他名字,用於區分不同應用程式的記錄。一旦設定,不能修改。
例如:
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName> myAppName</contextName>
<!--其他配置省略-->
</configuration>
3、子節點: 用來定義變數值,它有兩個屬性name和value,通過定義的值會被插入到logger上下文中,可以使“${}”來使用變數。
- name: 變數的名稱
- value: 的值時變數定義的值
例如:
<configuration scan="true" scanPeriod="60 seconds" debug="false">
< property name="APP_Name" value="myAppName" />
<contextName>${APP_Name}</contextName>
<!--其他配置省略-->
</configuration>
4.子節點:負責寫日誌的元件,它有兩個必要屬性name和class。
- name指定appender名稱
- class指定appender的全限定名
(1) ConsoleAppender 把日誌輸出到控制檯,有以下子節點:
- :對日誌進行格式化。
- :字串System.out(預設)或者System.err
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
上述配置表示把>=DEBUG級別的日誌都輸出到控制檯
- :過濾器,在Logback-classic中提供兩個型別的 filters , 一種是 regular filters ,另一種是 turbo filter。regular filters 是與appender 繫結的, 而turbo filter是與與logger context(logger 上下文)繫結的,區別就是,turbo filter過濾所有logging request ,而regular filter只過濾某個appender的logging request。
Regular filters:在 logback-classic中,filters 繼承 Filter 抽象類,Filter 抽象類有一個 decide()抽象方法,接收一個 ILoggingEvent 物件引數,而在 logback-access 中 則是 AccessEvent 物件。該方法返回一個enum型別 FilterReply。值可以是
DENY:如果方法返回DENY(拒絕),則跳出過濾鏈,而該 logging event 也會被拋棄。
NRUTRAL:如果返回NRUTRAL(中立),則繼續過濾鏈中的下一個過濾器。
ACCEPT:如果返回ACCEPT(通過),則跳出過濾鏈
下面是幾個常用的過濾器:
LevelFilter: 級別過濾器,根據日誌級別進行過濾。如果日誌級別等於配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日誌。有以下子節點:
:設定過濾級別
:用於配置符合過濾條件的操作
<onMismatch>:用於配置不符合過濾條件的操作
例如:將過濾器的日誌級別配置為INFO,所有INFO級別的日誌交給appender處理,非INFO級別的日誌,被過濾掉。
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>
%-4relative [%thread] %-5level %logger{30} - %msg%n
</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
(2) FileAppender:把日誌新增到檔案,有以下子節點:
- :被寫入的檔名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動建立,沒有預設值。
- :如果是 true,日誌被追加到檔案結尾,如果是 false,清空現存檔案,預設是true。
- :對記錄事件進行格式化。(具體引數稍後講解 )
- :如果是 true,日誌會被安全的寫入檔案,即使其他的FileAppender也在向此檔案做寫入操作,效率低,預設是 false。
例如:
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>testFile.log</file>
<append>true</append>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
RollingFileAppender:滾動記錄檔案, 先將日誌記錄到指定檔案,當符合某個條件時,將日誌記錄到其他檔案。有以下子節點:
- :被寫入的檔名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動建立,沒有預設值。
- :如果是 true,日誌被追加到檔案結尾,如果是 false,清空現存檔案,預設是true。
- :當發生滾動時,決定RollingFileAppender的行為,涉及檔案移動和重新命名。屬性class定義具體的滾動策略類——
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
上述配置表示每天生成一個日誌檔案,儲存30天的日誌檔案。
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>test.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>tests.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
上述配置表示按照固定視窗模式生成日誌檔案,當檔案大於20MB時,生成新的日誌檔案。視窗大小是1到3,當儲存了3個歸檔檔案後,將覆蓋最早的日誌。
子節點:用來設定某一個包或具體的某一個類的日誌列印級別、以及指定。僅有一個name屬性,一個可選的level和一個可選的addtivity屬性。
可以包含零個或多個<appender-ref>元素,標識這個appender將會新增到這個loger
- name: 用來指定受此loger約束的某一個包或者具體的某一個類。
- level: 用來設定列印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,還有一個特殊值INHERITED或者同義詞NULL,代表強制執行上級的級別。 如果未設定此屬性,那麼當前loger將會繼承上級的級別。
- addtivity: 是否向上級loger傳遞列印資訊。預設是true。同一樣,可以包含零個或多個元素,標識這個appender將會新增到這個loger。
例如:
<logger name="com.mmall" additivity="false" level="INFO" >
<appender-ref ref="mmall" />
<appender-ref ref="console"/>
</logger>
子節點:它也是元素,但是它是根logger,是所有的上級。只有一個level屬性,因為name已經被命名為"root",且已經是最上級了。
level: 用來設定列印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,不能設定為INHERITED或者同義詞NULL。 預設是DEBUG。
<root level="DEBUG">
<appender-ref ref="console"/>
<appender-ref ref="error"/>
</root>
Demo
1、新增依賴包logback使用需要和slf4j一起使用,所以總共需要新增依賴的包有slf4j-api
logback使用需要和slf4j一起使用,所以總共需要新增依賴的包有slf4j-api.jar,logback-core.jar,logback-classic.jar,logback-access.jar這個暫時用不到所以不新增依賴了,maven配置
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<logback.version>1.1.7</logback.version>
<slf4j.version>1.7.21</slf4j.version>
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
</dependencies>
2、logback.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定義日誌檔案的儲存地址 勿在 LogBack 的配置中使用相對路徑-->
<property name="LOG_HOME" value="/home" />
<!-- 控制檯輸出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日誌檔案 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日誌檔案輸出的檔名-->
<FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日誌檔案保留天數-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日誌檔案最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日誌輸出級別 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
3、java程式碼
public class App {
private final static Logger logger = LoggerFactory.getLogger(App.class);
public static void main(String[] args) {
logger.info("logback 成功了");
logger.error("logback 成功了");
logger.debug("logback 成功了");
}
}