logback ThresholdFilter臨界值日志過濾器源碼解讀
序
本文主要研究一下logback的ThresholdFilter
ThresholdFilter
ch/qos/logback/classic/filter/ThresholdFilter.java
public class ThresholdFilter extends Filter<ILoggingEvent> {
Level level;
@Override
public FilterReply decide(ILoggingEvent event) {
if (!isStarted()) {
return FilterReply.NEUTRAL;
}
if (event.getLevel().isGreaterOrEqual(level)) {
return FilterReply.NEUTRAL;
} else {
return FilterReply.DENY;
}
}
public void setLevel(String level) {
this.level = Level.toLevel(level);
}
public void start() {
if (this.level != null) {
super.start();
}
}
}ThresholdFilter繼承了Filter,其decide方法從ILoggingEvent獲取level,若該level大于等于指定的level則返回NEUTRAL,否則返回DENY
isGreaterOrEqual
ch/qos/logback/classic/Level.java
public final class Level implements java.io.Serializable {
private static final long serialVersionUID = -814092767334282137L;
public static final int OFF_INT = Integer.MAX_VALUE;
public static final int ERROR_INT = 40000;
public static final int WARN_INT = 30000;
public static final int INFO_INT = 20000;
public static final int DEBUG_INT = 10000;
public static final int TRACE_INT = 5000;
public static final int ALL_INT = Integer.MIN_VALUE;
/**
* The <code>OFF</code> is used to turn off logging.
*/
public static final Level OFF = new Level(OFF_INT, "OFF");
/**
* The <code>ERROR</code> level designates error events which may or not be
* fatal to the application.
*/
public static final Level ERROR = new Level(ERROR_INT, "ERROR");
/**
* The <code>WARN</code> level designates potentially harmful situations.
*/
public static final Level WARN = new Level(WARN_INT, "WARN");
/**
* The <code>INFO</code> level designates informational messages highlighting
* overall progress of the application.
*/
public static final Level INFO = new Level(INFO_INT, "INFO");
/**
* The <code>DEBUG</code> level designates informational events of lower
* importance.
*/
public static final Level DEBUG = new Level(DEBUG_INT, "DEBUG");
/**
* The <code>TRACE</code> level designates informational events of very low
* importance.
*/
public static final Level TRACE = new Level(TRACE_INT, "TRACE");
/**
* The <code>ALL</code> is used to turn on all logging.
*/
public static final Level ALL = new Level(ALL_INT, "ALL");
public final int levelInt;
public final String levelStr;
/**
* Instantiate a Level object.
*/
private Level(int levelInt, String levelStr) {
this.levelInt = levelInt;
this.levelStr = levelStr;
}
/**
* Returns <code>true</code> if this Level has a higher or equal Level than the
* Level passed as argument, <code>false</code> otherwise.
*/
public boolean isGreaterOrEqual(Level r) {
return levelInt >= r.levelInt;
}
//......
}Level定義了OFF(Integer.MAX_VALUE)、ERROR(40000)、WARN(30000)、INFO(20000)、DEBUG(10000)、TRACE(5000)、ALL(Integer.MIN_VALUE)這幾個level,其int值依次減小。isGreaterOrEqual方法則是根據(jù)levelInt值來判斷。
示例
<appender name="FILE_INFO"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>infoLog.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>infoLogs.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n
</pattern>
</encoder>
</appender>這里對FILE_INFO添加了ThresholdFilter,只有級別大于等于INFO的才打印
小結(jié)
logback的ThresholdFilter繼承了Filter,其decide方法從ILoggingEvent獲取level,若該level大于等于指定的level則返回NEUTRAL,否則返回DENY。Level定義了OFF(Integer.MAX_VALUE)、ERROR(40000)、WARN(30000)、INFO(20000)、DEBUG(10000)、TRACE(5000)、ALL(Integer.MIN_VALUE)這幾個level,其int值依次減小。isGreaterOrEqual方法則是根據(jù)levelInt值來判斷。
以上就是logback ThresholdFilter臨界值日志過濾器源碼解讀的詳細(xì)內(nèi)容,更多關(guān)于logback ThresholdFilter日志過濾器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot原生組件注入實現(xiàn)兩種方式介紹
SpringBoot是Spring全家桶的成員之一,基于約定優(yōu)于配置的思想(即有約定默認(rèn)值,在不配置的情況下會使用默認(rèn)值,在配置文件下配置的話會使用配置的值)。SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時也是簡化Spring的一種快速開發(fā)的腳手架2022-10-10
Java項目之java+springboot+ssm實現(xiàn)理財管理系統(tǒng)設(shè)計
這篇文章主要介紹了Java項目java+springboot+ssm實現(xiàn)理財管理系統(tǒng)設(shè)計,使用了當(dāng)前較為流行的spring boot,spring,spring mvc,mybatis,shiro框架分頁處理使用了pagehelper進(jìn)行操作,需要的朋友可以參考一下2022-03-03
Java分頁簡介_動力節(jié)點Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java分頁簡介的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08
使用Java實現(xiàn)Excel轉(zhuǎn)PDF的示例詳解
在實際的開發(fā)過程中,我們常常會遇到需要將 Excel 文件轉(zhuǎn)換為 PDF 文件的需求,本文為大家介紹一種Java中的常見實現(xiàn)方式,需要的可以參考一下2025-02-02

