關於logback日誌級別的配置

原文:https://www.cnblogs.com/whalesea/p/10950628.html

logback如果需要靈活的配置日誌級別,需要結合過濾器,<filter></fiter>這個標籤。需要注意的是,過濾器過濾的基礎是在root標籤的配置基礎上進行的。

過濾器可以寫在appender標籤內,可以寫一個或多個,順序執行。過濾器會對每個級別的日誌設置枚舉值,表示對日誌的處理方式。

  DENY:日誌將立即被拋棄不再經過其他過濾器;

  NEUTRAL:有序列表裏的下個過濾器過接着處理日誌;(該級別既不處理,也不拋棄,相當於沒有任何處理,日誌會被保存下來並在本appender被執行)

  ACCEPT:日誌會被立即處理,不再經過剩餘過濾器。

下面講述兩個常用的filter:

1、級別過濾器

  LevelFilter: 級別過濾器,對特定某個級別的日誌進行過濾。

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    
    <!-- 控制檯輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 1格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符-->
            <pattern></pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 過濾掉非info的日誌 -->
         <filter class="ch.qos.logback.classic.filter.LevelFilter">   
              <level>INFO</level>   
              <onMatch>ACCEPT</onMatch>   
              <onMismatch>DENY</onMismatch>   
          </filter>   
    </appender>
    
    
    <!-- 日誌級別排序爲: TRACE < DEBUG < INFO < WARN < ERROR -->
    <!-- 日誌輸出級別 -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

 

level:日誌級別。

onMatch:對符合過濾級別的日誌的操作。(DENY,NEUTRAL,ACCEPT)

onMismatch:對不符合過濾級別的日誌的操作。(DENY,NEUTRAL,ACCEPT)

測試代碼:

 

package com.dbzx.controller;

import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dbzx.common.ResultModel;

@Controller
public class HelloController {
    
    Logger logger = LoggerFactory.getLogger(HelloController.class);
    
    
    @ResponseBody
    @RequestMapping("/hello")
    public ResultModel hello() {
        logger.trace("*****************trace**********");
        logger.debug("*************debug*************");
        logger.info("**************info****************");
        logger.warn("****************warn***************");
        logger.error("****************error*************");
        return ResultModel.ok("hello,dbzx"+new Date().getTime());
    }
    

}

 

結果:

2019-05-30 17:21:19.413 [http-nio-8888-exec-1] INFO  com.dbzx.controller.HelloController - **************info****************

過濾器的配置在配置級別的基礎上過濾,即root標籤的配置級別。本例中,是對大於等於debug級別的日誌過濾。

 

ps:如果修改onMismatch參數爲NEUTRAL。

        <filter class="ch.qos.logback.classic.filter.LevelFilter">   
              <level>INFO</level>   
              <onMatch>ACCEPT</onMatch>   
              <onMismatch>NEUTRAL</onMismatch>   
          </filter> 

結果:

 

2019-05-30 17:25:08.045 [http-nio-8888-exec-1] DEBUG com.dbzx.controller.HelloController - *************debug*************
2019-05-30 17:25:08.045 [http-nio-8888-exec-1] INFO  com.dbzx.controller.HelloController - **************info****************
2019-05-30 17:25:08.045 [http-nio-8888-exec-1] WARN  com.dbzx.controller.HelloController - ****************warn***************
2019-05-30 17:25:08.046 [http-nio-8888-exec-1] ERROR com.dbzx.controller.HelloController - ****************error*************

 

 

結果就是:出了info級別,debug、warn、error級別的日誌也會被打印,即不符合配置級別的日誌,同樣被執行。

2、臨界值過濾器

ThresholdFilter: 臨界值過濾器,過濾掉低於指定臨界值的日誌。

它沒有過多的參數,只有默認配置。當日志級別等於或高於臨界值時,過濾器返回NEUTRAL;當日志級別低於臨界值時,日誌返回DENY。

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    
    <!-- 控制檯輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 1格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符-->
            <pattern></pattern>
            <charset>utf-8</charset>
        </encoder>
       <!--臨界值日誌過濾級別配置 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!-- 只打印DEBUG日誌 --> 
            <!-- 在日誌配置級別的基礎上過濾掉info級別以下的日誌 -->
            <level>INFO</level> 
        </filter> 
    </appender>  
    </appender>
    
    
    <!-- 日誌級別排序爲: TRACE < DEBUG < INFO < WARN < ERROR -->
    <!-- 日誌輸出級別 -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

 

結果:

 

2019-05-30 17:26:42.755 [http-nio-8888-exec-1] INFO  com.dbzx.controller.HelloController - **************info****************
2019-05-30 17:26:42.755 [http-nio-8888-exec-1] WARN  com.dbzx.controller.HelloController - ****************warn***************
2019-05-30 17:26:42.756 [http-nio-8888-exec-1] ERROR com.dbzx.controller.HelloController - ****************error*************

 

在debug配置級別的基礎上,過濾掉info一下的日誌。最終,info及大於info級別的日誌打印的控制檯,info以下,debug及debug以上的日誌,被拋棄掉。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章