Logback中使用TurboFilter实现日志级别等内容的动态修改 原 荐

程序猿DD的个人空间

工作日志

正文

Logback中使用TurboFilter实现日志级别等内容的动态修改 原 荐

Logback中使用TurboFilter实现日志级别等内容的动态修改

Logback中使用TurboFilter实现日志级别等内容的动态修改 原 荐

  程序猿DD 发布于 昨天 21:30

字数 725

阅读 6

收藏 0

logback

开发十年,就只剩下这套架构体系了! >>> Logback中使用TurboFilter实现日志级别等内容的动态修改 原 荐

可能看到这个标题,读者会问:要修改日志的级别,不是直接修改log.xxx就好了吗?为何要搞那么复杂呢?所以,先说一下场景,为什么要通过TurboFilter去动态的修改日志级别。我们在使用Java开发各种项目的时候必然的会引入很多框架,这些框架通过堆叠的方式完成所要提供的业务服务(一个服务请求在进入后会在这些框架中兜一圈,然后返回结果),当一个比较底层的框架在处理过程中抛出了异常之后,这个异常会不断的向上传递。这个时候,有的框架直接throw,继续向上抛,而有的在throw之前还会自己打印一下error日志,这就导致了当出现异常的时候,往往会出现一连串类似的错误日志记录。如果对接了错误日志告警,就会出现重复告警的现象。为了解决类似这样的问题,修改源码重新编译最直接,但是不可取。所以希望可以有更好的手段去控制这些已经被编码固化的日志打印信息。当我们使用Logback的时候,TurboFilter就是解决该问题的工具之一。

TurboFIlter不同于之前在[《Logback中如何自定义灵活的日志过滤规则》]一文中介绍的那些通过 ch.qos.logback.core.filter.Filter 接口实现的过滤器。 ch.qos.logback.core.filter.Filter 实现的过滤器是与Appender绑定的,而TurboFIlter是与日志上下文绑定的,它会过滤所有的日志请求,并且TurboFIlter的方法中提供了丰富的可访问信息用来进行控制和改写。

比如下面的实现,通过继承 ch.qos.logback.classic.turbo.TurboFilter 类,并重写 decide 方法,将 org.springframework.cloud.sleuth.instrument.web.ExceptionLoggingFilter 类中原本要打印的ERROR日志DENY掉(过滤掉),同时以WARN级别打印一封相同的内容,这样就实现了对已定义日志的动态修改。

public class ForceWarnFilter extends TurboFilter {

    @Override
    public FilterReply decide(Marker marker, Logger logger, Level level, String format, Object[] params, Throwable throwable) {
        if (level == Level.ERROR && logger.getName().equals("org.springframework.cloud.sleuth.instrument.web.ExceptionLoggingFilter")) {
            logger.warn(marker, format, params);
            return FilterReply.DENY;
        }
        return FilterReply.NEUTRAL;
    }

}

为了让上面定义的过滤器生效,需要在logback的配置xml中增加如下配置:

<configuration>
    <turboFilter class="com.didispace.log.filter.ForceWarnFilter" />

    ......
</configuration>

或者也可以在应用主类中增加:

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
lc.addTurboFilter(new MyTurboFilter());

更多关于Logback过滤器的内容可参考官方文档: https://logback.qos.ch/manual/filters.html

Logback中使用TurboFilter实现日志级别等内容的动态修改 原 荐

© 著作权归作者所有

共有人打赏支持

上一篇: 程序猿DD《Spring Cloud构建微服务架构系列》汇总

下一篇: Logback中如何自定义灵活的日志过滤规则

Logback中使用TurboFilter实现日志级别等内容的动态修改 原 荐

程序猿DD

粉丝 365

博文 63

码字总数 82962

作品 4

闵行

提问

相关文章 最新文章

logback基本架构和运作逻辑以及一些常用的自定义方式

logback工程架构 logback基于Maven,分为logback-core,logback-classic,logback-access三个module; 使用的时候一般需要三个jar包slf4j-api.jar及logback-classic.jar及logback-core.jar; 当……

Aruforce

11/09

0

0

Java日志系统研究

基本功能 1. 支持多个等级的日志打印:trace,debug,warning,error等等1. 支持按照不同的包名指定不同的等级1. 支持设置全局的默认日志等级1. 打印日志到单个或者多个文件,文件可以按指定…

landyking

2016/07/18

104

0

spring boot(8)默认日志logback配置

1 日志简介 Spring Boot使用Commons Logging记录所有内部日志,但是它将底层日志实现打开,为Java.Util.Logging,Log4J2和Logback提供默认配置。 在每个案例中,loggers都预先配置,以使用控…

刘胜球

2017/10/31

0

0

java日志组件(common-logging slf4j log4j logback)

一、日志接口(common-loggin&slf4j) —————————————-common-logging—————————————– common-logging是apache提供的一个通用的日志接口……

思悟修

2015/12/16

124

0

logback 配置详解

概览 简单地说,Logback 是一个 Java 领域的日志框架。它被认为是 Log4J 的继承人。 Logback 主要由三个模块组成: logback-core logback-classic logback-access logback-core 是其它模块的…

beanlam

2017/02/10

0

0

没有更多内容

加载失败,请刷新页面

加载更多

apk decompile 在线反编译工具-toolfk程序员在线工具网

本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果。T…

toolfk

25分钟前

4

0

Logback中使用TurboFilter实现日志级别等内容的动态修改 原 荐

(五) 整合spring cloud服务架构 – 云架构代码结构构建

上一篇介绍了《整合spring cloud云服务架构 – 企业分布式微服务云架构图》,本篇我们根据架构图进行代码的构建。根据微服务化设计思想,结合spring cloud一些优秀的项目,如服务发现、治理、…

itcloud

28分钟前

3

0

Logback中使用TurboFilter实现日志级别等内容的动态修改 原 荐

(六)整合spring cloud云服务架构 – 企业云架构common-service代码结构分析

当前的分布式微服务云架构平台使用Maven构建,所以common-service的通用服务按照maven构建独立的系统服务,结构如下: particle-commonservice: spring cloud 系统服务根项目,所有服务项目…

明理萝

44分钟前

2

1

Logback中使用TurboFilter实现日志级别等内容的动态修改 原 荐

Yii2页面缓存详解

页面缓存指的是在服务器端缓存整个页面的内容。随后当同一个页面 被请求时,内容将从缓存中取出,而不是重新生成。 举例说明 class TestController extends Controller{ // 该方法会在其他方…

dragon_tech

47分钟前

2

0

pyhanlp 文本聚类详细介绍

文本聚类 文本聚类简单点的来说就是将文本视作一个样本,在其上面进行聚类操作。但是与我们机器学习中常用的聚类操作不同之处在于。 我们的聚类对象不是直接的文本本身,而是文本提取出来的特…

左手的倒影

49分钟前

5

0

没有更多内容

加载失败,请刷新页面

加载更多

原文 

https://my.oschina.net/didispace/blog/2909130

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Logback中使用TurboFilter实现日志级别等内容的动态修改 原 荐

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址