turbofilters
turbofilter物件全部繼承於turbofilter抽象類。像正則過濾器一樣,它們都使用三進製邏輯返回對日誌事件的判斷。
它們的工作試類似於前面提到的過濾器。但,filter與turbofilter存在兩點不一樣。
更重要的,它們會在loggingevent物件建立前被呼叫。turbofilter物件過濾日誌請求,不需要乙個日誌事件的例項化。因此,turbofilters用於高效能地過濾日誌事件,即使在日誌事件物件建立前。
實現自定義trubofilter
只壓根繼承turbofilter抽象類就可以建立自定義turbofilter物件。像前面實現自定義過濾器一樣,實現自定義過濾器只要實現decide()方法。下面的例子中,我們建立了乙個稍微複雜的過濾器:
package chapters.filters;
import org.slf4j.marker;
import org.slf4j.marke***ctory;
import ch.qos.logback.classic.level;
import ch.qos.logback.classic.logger;
import ch.qos.logback.classic.turbo.turbofilter;
import ch.qos.logback.core.spi.filterreply;
public class sampleturbofilter extends turbofilter
if ((markertoaccept.equals(marker))) else
} public string getmarker()
public void setmarker(string markerstr)
@override
public void start()
}}
上面的turbofilter接收飲食特殊標識的事件。如果未找到指定標識,過濾器則將責任傳遞給連上下乙個過濾器。
為了增加靈活性,通過getter與setter,測試標識可能在配置檔案中指定。我們也通過實現start()方法去驗證在處理配置過程中選項是否已指定。
samplelogback提供了一些turbofilter類。mdcfilter用於驗證是否存在指定值;dynamicthresholdfilter基於mdc的key與level閥值過濾。另乙個方面,markerfilter用於驗證日誌請求中包含指定標識。
下面是應用mdcfilter與markerfilter的乙個例子:
username
sebastien
accept
billing
deny
duplicatemessagefilter
duplicatemessagefilter優點在與眾不同。這個過濾器會監測重複的訊息,超過一定數量後,會丟棄掉重複的訊息。
為了監控重複,過濾器在訊息中使用簡單的string相等性。它不會監測到只有一些字元差異的非常相近的訊息。例如:
logger.debug("hello "+name0);
logger.debug("hello "+name1);
假設name0與name1有不同的值,則認為這兩條"hello"訊息不相關。依賴於使用者的使用,以後的發布版本有可能新增驗證string相似性功能。
注意包含引數的日誌情況,只有考慮到原始訊息。例如:下面兩個請求,原始訊息為"hello {}"一樣,因此,它被視為重複。
重複的數量可能通過allowedrepetitions屬性配置。例如,如果屬性值為1,則第2條及以後的相同訊息會被丟棄。類似,如果屬性值為2,則第3條及以後的相同訊息會被丟棄。allowedrepetitions預設值為5。
為了監測重複性,這個過濾器需要在內部快取中保持舊訊息的引用。這個快取的大小取決於屬性cachesize。預設,屬性值為100。
因此,配置了上面過濾器的filterevents輸出為:
2008-12-19 15:04:26,156 [main] info chapters.filters.filterevents - logging statement 0
2008-12-19 15:04:26,156 [main] info chapters.filters.filterevents - logging statement 1
2008-12-19 15:04:26,156 [main] info chapters.filters.filterevents - logging statement 2
2008-12-19 15:04:26,156 [main] info chapters.filters.filterevents - logging statement 4
2008-12-19 15:04:26,156 [main] info chapters.filters.filterevents - logging statement 5
2008-12-19 15:04:26,171 [main] error chapters.filters.filterevents - billing statement 6
「logging statement 0」是第乙個"logging statement {}"的發生。"logging statement 1"是第1個重複,"logging statement 2"是第2個重複。有趣的是,雖然基本規則被丟棄了,debug級別的"logging statement 3"是第3個重複。通過這個可以看出turbofilter早於其它過濾器呼叫,包含基本規則。因此,duplicatemessagefilter認為"logging statement 3"為重複。由於它被後面的連上的規則丟棄造成它常常被忘記。"logging statement 4"是第4個重複,"logging statement 5"第5個。由於預設只允許5個重複,statements6以及之後的都將被丟棄。
logback-access
countingfilter
通過countingfilter,logback-access可以提供web-server的訪問統計資料。初始化時,countingfilter以mbean的形式將自己註冊到jmx伺服器。你可以通過訪問那個mbean獲取統計資料,如,每分鐘、小時、天、星期、月平均值。其它統計,如,上週、前天、上乙個小時、上個月的數量,以及獲得的總數量。
下面的lobback-access.xml宣告了乙個countingfilter:
countingfilter你可以通過jconsole檢視jmx伺服器上的任何統計資料
判斷表示式用於處理當前訪問事件。logback-access自動將以event變數名,匯入accessevent例項。你可以讀取關於http請求與響應的各種資料。
下面配置檔案展示了過濾響應編碼為404的,每個請求為404的都會列印到console中。
deny
%h %l %u %t %r %s %b
下面乙個鴿子,我們過濾結果為404錯誤與請求css型別檔案:
&&
!(event.getrequesturi().contains(".css"))
deny
%h %l %u %t %r %s %b
參考文件:
VMware License Server使用經驗
近期在測試vmware server,在使用vmware license server的時候碰到一些問題,經過兩天的實驗,問題得以解決,現記錄如下,以供朋友們參考。1 複製license檔案 在安裝vmware virtualcenter的時候,會一同安裝license server伺服器。如果你在...
Django Rest framework使用例項
一 修改配置檔案 setting.py django.contrib.admin django.contrib.auth django.contrib.contenttypes django.contrib.sessions django.contrib.messages django.contri...
Android AlarmManager 使用指南
intent intent new intent intent.setaction updatemgr.check update action 如果你的flag 是flag one shot,那麼你就只能受到一次廣播。如果使用setrepeat,你設定的intervalmills 少於60s,那麼就...