隨筆 - 22, 文章 - 0, 評論 - 1, 引用 - 0
          數據加載中……

          logback_doc_manual_07_filters

          http://logback.qos.ch/manual/filters.html
          logback-classic有兩種filter:Regular filters和turbo filters,掛在appender上
          Regular filters
               只有一個decide()方法,返回DENY, NEUTRAL or ACCEPT
          LevelFilter
               <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
               </filter>
          ThresholdFilter
               高于或等于指定日志級別的記錄,會返回NEUTRAL
               <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
               </filter>     
          EvaluatorFilter
               EventEvaluator的實現判斷某個條件是否滿足。
               
               GEventEvaluator
                    接受groovy語法的布爾表達式作為判斷條件,需要依賴Groovy運行時,表達式語句在配置的時候完成編譯。
                    logback會自動將目標事件作為一個變量傳進來,可以用“event”或者“e”來引用。
                    TRACE, DEBUG, INFO, WARN and ERROR這些級別也引入了,所以可以這樣判斷相等: "event.level == DEBUG" 。
                    其他比較符,大于小于,需要轉換成int再比較。
              <filter class="ch.qos.logback.core.filter.EvaluatorFilter">      
                <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator"> 
                  <expression>
                     e.level.toInt() >= WARN.toInt() &amp;&amp;  <!-- Stands for && in XML -->
                     !(e.mdc?.get("req.userAgent") =~ /Googlebot|msnbot|Yahoo/ )
                  </expression>
                </evaluator>
                <OnMismatch>DENY</OnMismatch>
                <OnMatch>NEUTRAL</OnMatch>
              </filter>
               JaninoEventEvaluator
                    使用java表達式,使用上比基于groovy的GEventEvaluator繁瑣,但執行速度更快。
                    詳情略。
                    
          Matchers
               執行上面的過濾器時,可以調用String.matches()方法,但代價是每次需要重編譯一個正則Pattern對象。
               所以可以預先定義和編譯一個,以便復用。
               詳情略。
          TurboFilters
               跟普通過濾器功能一樣,但是:
                    1,TurboFilter是跟logging context關聯的,而不是跟appender關聯。作用域更大。不僅在指定appender使用時,而且在每次logging請求時都會被調用。
                    2,他們是在LoggingEvent對象創建之前被調用,過濾時不需要event實例做參數,所以性能更高(因為在event創建之前就已經執行過濾了)。
               內置了一些TurboFilter:
                    MDCFilter     測試指定的值是否存在于MDC中
                    DynamicThresholdFilter     基于MDC的key和level來限流
                    MarkerFilter     測試指定的marker是否出現在請求中
                    DuplicateMessageFilter
                         自動過濾相同的消息。
                              使用簡單的字符串比對——即使兩個字符串基本相同,相差一兩個字母:也會被認為不同。
                              僅比較raw字符串,用{}轉義過的字符串不去比較。
                              可以通過AllowedRepetitions設置允許的重復上限,超過上限的會被拋棄。默認大小為5
                              需要通過一個內部cache來保存老的消息以便判斷,可以通過CacheSize設置緩存大小,默認100.
                    
          在evaluator的expression里,將logging時間與項目啟動時間對比,可以控制僅輸出“項目啟動后20秒內的某類型日志”——這個對于“確認某個定時任務在啟動時是運行狀態”很有用,例如:
          <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator name="loggingTaskEval">
              <expression>
                logger.getName().contains("LoggingTask") &amp;&amp;
                message.contains("Howdydy-diddly-ho") &amp;&amp;
                (timeStamp - event.getStartTime()) >= 20000
              </expression>
            </evaluator>
            <OnMatch>DENY</OnMatch>
          </filter>

          posted on 2014-07-13 18:59 王星游 閱讀(420) 評論(0)  編輯  收藏 所屬分類: java

          主站蜘蛛池模板: 镇沅| 平凉市| 星座| 泸州市| 洪雅县| 宁安市| 宾阳县| 全椒县| 留坝县| 阿拉尔市| 双江| 任丘市| 黎城县| 延吉市| 芮城县| 喀喇| 遂宁市| 晋江市| 花莲市| 乌什县| 象州县| 繁昌县| 霍城县| 织金县| 和林格尔县| 德阳市| 巍山| 成武县| 察隅县| 孝义市| 汝阳县| 墨江| 梨树县| 辰溪县| 丹寨县| 安康市| 吉木萨尔县| 长丰县| 清流县| 宜兴市| 木兰县|