概述
logback如果需要靈活的配置日志級別宣赔,需要結(jié)合過濾器瞪浸,這個標(biāo)簽。需要注意的是钩蚊,過濾器過濾的基礎(chǔ)是在root標(biāo)簽的配置基礎(chǔ)上進行的。
過濾器可以寫在appender標(biāo)簽內(nèi)两疚,可以寫一個或多個含滴,順序執(zhí)行。過濾器會對每個級別的日志設(shè)置枚舉值谈况,表示對日志的處理方式递胧。
DENY:日志將立即被拋棄不再經(jīng)過其他過濾器赡茸;
NEUTRAL:有序列表里的下個過濾器過接著處理日志;(該級別既不處理占卧,也不拋棄,相當(dāng)于沒有任何處理华蜒,日志會被保存下來并在本appender被執(zhí)行)
ACCEPT:日志會被立即處理,不再經(jīng)過剩余過濾器叭喜。
下面講述兩個常用的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());
}
}
結(jié)果:
2019-05-30 17:21:19.413 [http-nio-8888-exec-1] INFO com.dbzx.controller.HelloController - **************info****************
過濾器的配置在配置級別的基礎(chǔ)上過濾沸手,即root標(biāo)簽的配置級別。本例中契吉,是對大于等于debug級別的日志過濾。
ps:如果修改onMismatch參數(shù)為NEUTRAL捐晶。
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>NEUTRAL</onMismatch>
</filter>
結(jié)果:
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*************
結(jié)果就是:出了info級別惑灵,debug、warn泣棋、error級別的日志也會被打印,即不符合配置級別的日志潭辈,同樣被執(zhí)行。
2把敢、臨界值過濾器
ThresholdFilter: 臨界值過濾器,過濾掉低于指定臨界值的日志修赞。
它沒有過多的參數(shù),只有默認配置勾邦。當(dāng)日志級別等于或高于臨界值時割择,過濾器返回NEUTRAL眷篇;當(dāng)日志級別低于臨界值時荔泳,日志返回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日志 -->
<!-- 在日志配置級別的基礎(chǔ)上過濾掉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>
結(jié)果:
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配置級別的基礎(chǔ)上,過濾掉info以下的日志瓤的。最終,info及大于info級別的日志打印的控制臺圈膏,info以下,debug及debug以上的日志稽坤,被拋棄掉。