Java中的logback标记日志过滤器MarkerFilter详解

 更新时间:2023年11月15日 10:00:31   作者:立小研先森  
这篇文章主要介绍了Java中的logback标记日志过滤器MarkerFilter详解,在logback-classic中存在一个全局过滤器TurboFilter,TurboFilter是与LoggerContext绑定,会在会在其它过滤器之前执行,需要的朋友可以参考下

开源日志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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中接口和事件监听器的深入理解

    java中接口和事件监听器的深入理解

    这篇文章主要给大家介绍了关于java中接口和事件监听器的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • springboot整合 beatlsql的实例代码

    springboot整合 beatlsql的实例代码

    这篇文章主要介绍了springboot整合 beatlsql的实例代码,BeetSql是一个全功能DAO工具,同时具有hibernate 优点 & Mybatis优点功能,有兴趣的可以了解一下
    2017-05-05
  • Mybatis下动态sql中##和$$的区别讲解

    Mybatis下动态sql中##和$$的区别讲解

    今天小编就为大家分享一篇关于Mybatis下动态sql中##和$$的区别讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • SpringBoot整合Spring Security过滤器链加载执行流程源码分析(最新推荐)

    SpringBoot整合Spring Security过滤器链加载执行流程源码分析(最新推荐)

    Spring Boot 对于 Spring Security 提供了自动化配置方案,可以使用更少的配置来使用 Spring Security,这篇文章主要介绍了SpringBoot整合Spring Security过滤器链加载执行流程源码分析,需要的朋友可以参考下
    2023-02-02
  • Java多线程环境下使用的集合类示例详解

    Java多线程环境下使用的集合类示例详解

    这篇文章主要给大家介绍了关于Java多线程环境下使用的集合类的相关资料,开发过程中经常遇到这种需求,文中通过代码示例和图文介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • 基于ReentrantLock的实现原理讲解

    基于ReentrantLock的实现原理讲解

    这篇文章主要介绍了ReentrantLock的实现原理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • mybatis查询数据赋值到model里面为空的解决

    mybatis查询数据赋值到model里面为空的解决

    这篇文章主要介绍了mybatis查询数据赋值到model里面为空的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Netty中最简单的粘包解析方法分享

    Netty中最简单的粘包解析方法分享

    黏包 是指网络上有多条数据发送给服务端, 但是由于某种原因这些数据在被接受的时候进行了重新组合,本文分享了一种最简单的黏包解析方法, 非常适用于初初初级选手
    2023-05-05
  • SpringMVC框架整合Junit进行单元测试(案例详解)

    SpringMVC框架整合Junit进行单元测试(案例详解)

    本文详细介绍在SpringMVC任何使用Junit框架。首先介绍了如何引入依赖,接着介绍了编写一个测试基类,并且对其中涉及的各个注解做了一个详细说明,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • 详谈Java中BigDecimal的一个除法异常

    详谈Java中BigDecimal的一个除法异常

    下面小编就为大家分享一篇详谈Java中BigDecimal的一个除法异常,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11

最新评论