(1)要用Logback當然就一併用slf4j,Maven2的dependencies就加入:
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>0.9.16</version> <type>jar</type> </dependency> <!-- 用以取代commons-logging --> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.5.8</version> <type>jar</type> </dependency> <!-- 用以取代Log4j,若確定系統中都是透過commons-logging並未直接 呼叫log4j的話可以不用加此設定--> <dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> <version>1.5.8</version> <type>jar</type> </dependency>
(2)logback-test.xml 與 logback.xml
Logback預設會先找classpath下是否有logback-test.xml,若沒有的話再找logback.xml,若都沒有就用預設的configuration.
所以如果是採用Maven預設的Source Code Structure的話,只要在src/test/resources/下放一個test專用的logback-test.xml就可以專門記錄test產生log.而不需要特別再去改正常系統的logback.xml.
(3)debug mode與automatically reloading
Logback有個機制可以檢視系統載入的logback configuration,還可以定時確認logback.xml是否有被改變而重新載入改變後的設定
<configuration debug="true" scan="true" scanPeriod="30 seconds"> </configuration>其中debug="true"就是開啟debug mode,會列出目前載入設定檔的名稱,裡面的logger,appender也會列出來。
而scan="true"就是啟用automatically reloading,scanPeriod則可以設定每隔多久檢查是否有更改而載入的時間。
(4)可以設定變數
1. 直接指定Properties name and value.
<property name="USER_HOME" value="/home/elliot" />2. 利用file指定properties file location
<property file="src/main/resources/system.properties" />3. 使用resource在classpath中找properties file
<property resource="system.properties" />就可以在logback.xml中使用${USER_HOME}來控制Log
(5)RollingFileAppender supports automatic file compression。
只要用FixedWindowRollingPolicy或TimeBasedRollingPolicy就可以自動壓縮。
<FileNamePattern>${namepattern}.log.zip/.gz</FileNamePattern>在FileNamePattern內最後加上.zip就會用zip壓縮,而加入gz即會使用gzip壓縮log.
(6)有趣的Filter
1. 可以利用LevelFilter只接收單一種類Level的Log
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter>這個Filter相當方便,有時在DEBUG時只希望看ERROR的部份,這個Filter可以讓我專注於ERROR的資料。
2. 利用EvaluatorFilter接收含有特別意義的Log
<filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <evaluator name="myEval"> <expression>message.contains("billing")</expression> </evaluator> <OnMismatch>NEUTRAL</OnMismatch> <OnMatch>DENY</OnMatch> </filter>這個Filter也相當有用,當我希望取得具有特定字串或Exception的Log時,這個Filter能很方便的取得需要的資料。
沒有留言:
張貼留言