Java中的logback標記日志過濾器MarkerFilter詳解
開源日志SDK(純java版)
<!-- Java基于logback的日志組件SDK -->
<dependency>
<groupId>io.github.mingyang66</groupId>
<artifactId>emily-spring-boot-logger</artifactId>
<version>4.3.6</version>
</dependency>
<!--Java通用日志組件SDK-->
<dependency>
<groupId>io.github.mingyang66</groupId>
<artifactId>oceansky-logger</artifactId>
<version>4.3.6</version>
</dependency>
在logback-classic中存在一個全局過濾器TurboFilter,TurboFilter是與LoggerContext綁定,會在會在其它過濾器之前執(zhí)行;MarkerFilter是TurboFilter的一個子類,其作用是標記日志是否記錄入文件之中,可以指定標記的日志記錄到文件中;也可以指定標記的日志拒絕記錄到文件中,其它未標記的記錄入文件;
一、定義MarkerFilter初始化實例對象
/**
* 全局標記過濾器,接受指定標記的日志記錄到文件中
*
* @param context 上下文
* @param marker marker標識
* @return 標記過濾器,將會接受被標記的日志記錄到文件中
*/
public MarkerFilter getAcceptMarkerFilter(Context context, String marker) {
MarkerFilter filter = new MarkerFilter();
//過濾器名稱
filter.setName(StrUtils.join("AcceptMarkerFilter-", marker));
//上下文
filter.setContext(context);
//日志過濾級別
filter.setMarker(marker);
//設置符合條件的日志接受
filter.setOnMatch(FilterReply.ACCEPT.name());
//不符合條件的日志拒絕
filter.setOnMismatch(FilterReply.DENY.name());
//添加內部狀態(tài)信息
filter.addError("Build AcceptMarkerFilter Success");
//標記為啟用狀態(tài)
filter.start();
return filter;
}
/**
* 全局標記過濾器,拒絕標記的日志記錄到文件中
*
* @param context 上下文
* @param marker marker標識
* @return 標記過濾器,將會拒絕被標記的日志記錄到文件中
*/
public MarkerFilter getDenyMarkerFilter(Context context, String marker) {
MarkerFilter filter = new MarkerFilter();
//過濾器名稱
filter.setName(StrUtils.join("DenyMarkerFilter-", marker));
//上下文
filter.setContext(context);
//日志過濾級別
filter.setMarker(marker);
//設置符合條件的日志接受
filter.setOnMatch(FilterReply.DENY.name());
//不符合條件的日志拒絕
filter.setOnMismatch(FilterReply.ACCEPT.name());
//添加內部狀態(tài)信息
filter.addError("Build DenyMarkerFilter Success");
//標記為啟用狀態(tài)
filter.start();
return filter;
}上述定義了一個指定標記的日志會被記錄入文件的MarkerFilter過濾器,一個指定標記的日志不會被記錄日志文件,其它日志文件會被記錄入文件。
二、將MarkerFilter添加到LoggerContext上下文
private static final LoggerContext LOGGER_CONTEXT = (LoggerContext) LoggerFactory.getILoggerFactory(); context.addTurboFilter(LogbackFilter.getSingleton().getAcceptMarkerFilter(context, marker)); context.addTurboFilter(LogbackFilter.getSingleton().getDenyMarkerFilter(context, marker));
上述代碼比較簡單,詳情可以參考源碼;上述會將定義好的兩個全局過濾器添加到LoggerContext中,接下來就可以根據需要標記日志,控制是否輸出到日志文件。
三、標記日志使用示例
private static final Logger baseLogger = LoggerFactory.getLogger(LogbackController.class);
private static final Marker marker = MarkerFactory.getMarker("instance_marker");
baseLogger.error("--------error");
baseLogger.info("--------info");
baseLogger.debug("--------debug");
baseLogger.warn("--------warn");
baseLogger.trace("--------trace");
baseLogger.error(marker, "--------marker error");
baseLogger.info(marker, "--------marker info");
baseLogger.debug(marker, "--------marker debug");
baseLogger.warn(marker, "--------marker warn");
baseLogger.trace(marker, "--------marker trace");
上述示例如果指定的標記設置為接受打印到日志文件,則你會在日志文件中、控制臺上看到帶有marker的日志信息;如果標記的日志被設置為拒絕,則在日志文件、控制臺上看到的就是不帶marker的日志信息;
到此這篇關于Java中的logback標記日志過濾器MarkerFilter詳解的文章就介紹到這了,更多相關logback標記日志過濾器MarkerFilter內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring?Security實現分布式系統(tǒng)授權方案詳解
這篇文章主要介紹了Spring?Security實現分布式系統(tǒng)授權,本節(jié)完成注冊中心的搭建,注冊中心采用Eureka,本文通過示例代碼圖文相結合給大家介紹的非常詳細,需要的朋友可以參考下2022-02-02
java使用BeanUtils.copyProperties踩坑經歷
最近在做個項目,踩了個坑特此記錄一下,本文主要介紹了使用BeanUtils.copyProperties踩坑經歷,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05
spring @EventListener 事件與監(jiān)聽的示例詳解
本文介紹了自定義Spring事件和監(jiān)聽器的方法,包括如何發(fā)布事件、監(jiān)聽事件以及如何處理異步事件,通過示例代碼和日志,展示了事件的順序執(zhí)行和異步處理機制,感興趣的朋友一起看看吧2025-03-03

