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绑定,会在会在其它过滤器之前执行;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()); //添加内部状态信息 filter.addError("Build AcceptMarkerFilter Success"); //标记为启用状态 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()); //添加内部状态信息 filter.addError("Build DenyMarkerFilter Success"); //标记为启用状态 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
以Spring Boot的方式显示图片或下载文件到浏览器的示例代码
这篇文章主要介绍了以Spring Boot的方式显示图片或下载文件到浏览器的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01java中 String和StringBuffer的区别实例详解
这篇文章主要介绍了java中 String和StringBuffer的区别实例详解的相关资料,一个小的例子,来测试String和StringBuffer在时间和空间使用上的差别,需要的朋友可以参考下2017-04-04Spring boot详解fastjson过滤字段为null值如何解决
这篇文章主要介绍了解决Spring boot中fastjson过滤字段为null值的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-07-07java中instanceof和getClass()的区别分析
本篇文章介绍了,在java中instanceof和getClass()的区别分析。需要的朋友参考下2013-04-04Java9新特性Java.util.Optional优化与增强解析
这篇文章主要为大家介绍了Java9新特性Java.util.Optional优化与增强使用说明解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步2022-03-03
最新评论