聊聊logback的DynamicThresholdFilter

本文主要研究一下logback的DynamicThresholdFilter

DynamicThresholdFilter

public class DynamicThresholdFilter extends TurboFilter {private Map<String, Level> valueLevelMap = new HashMap<String, Level>();private Level defaultThreshold = Level.ERROR;private String key;private FilterReply onHigherOrEqual = FilterReply.NEUTRAL;private FilterReply onLower = FilterReply.DENY;//......
}    

DynamicThresholdFilter继承了TurboFilter,它定义了valueLevelMap、defaultThreshold为ERROR,onHigherOrEqual为NEUTRAL,onLower为DENY

addMDCValueLevelPair

    public void addMDCValueLevelPair(MDCValueLevelPair mdcValueLevelPair) {if (valueLevelMap.containsKey(mdcValueLevelPair.getValue())) {addError(mdcValueLevelPair.getValue() + " has been already set");} else {valueLevelMap.put(mdcValueLevelPair.getValue(), mdcValueLevelPair.getLevel());}}    

addMDCValueLevelPair方法可以根据MDCValueLevelPair往valueLevelMap添加配置

MDCValueLevelPair

ch/qos/logback/classic/turbo/MDCValueLevelPair.java

public class MDCValueLevelPair {private String value;private Level level;public String getValue() {return value;}public void setValue(String name) {this.value = name;}public Level getLevel() {return level;}public void setLevel(Level level) {this.level = level;}
}

MDCValueLevelPair定义了value及level属性

decide

    public FilterReply decide(Marker marker, Logger logger, Level level, String s, Object[] objects,Throwable throwable) {String mdcValue = MDC.get(this.key);if (!isStarted()) {return FilterReply.NEUTRAL;}Level levelAssociatedWithMDCValue = null;if (mdcValue != null) {levelAssociatedWithMDCValue = valueLevelMap.get(mdcValue);}if (levelAssociatedWithMDCValue == null) {levelAssociatedWithMDCValue = defaultThreshold;}if (level.isGreaterOrEqual(levelAssociatedWithMDCValue)) {return onHigherOrEqual;} else {return onLower;}}

decide方法先从mdc获取key对应的mdcValue,然后根据mdcValue去valueLevelMap获取对应的level,如果获取不到则取defaultThreshold;如果要打印的level大于等于levelAssociatedWithMDCValue则返回NEUTRAL,否则返回DENY

示例

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration><configuration><turboFilter class="ch.qos.logback.classic.turbo.DynamicThresholdFilter"><Key>userId</Key><DefaultThreshold>ERROR</DefaultThreshold><MDCValueLevelPair><value>user1</value><level>INFO</level></MDCValueLevelPair><MDCValueLevelPair><value>user2</value><level>TRACE</level></MDCValueLevelPair></turboFilter><appender name="LIST"class="ch.qos.logback.core.read.ListAppender"></appender><root><level value="DEBUG" /><appender-ref ref="LIST" /></root>
</configuration>

小结

logback提供了DynamicThresholdFilter,它可以根据配置的key从MDC取值,再根据配置的MDCValueLevelPair去映射对应的level,达到动态log级别的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/143698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP32网络开发实例-BME280传感器数据保存到InfluxDB时序数据库

BME280传感器数据保存到InfluxDB时序数据库 文章目录 BME280传感器数据保存到InfluxDB时序数据库1、BM280和InfluxDB介绍2、软件准备3、硬件准备4、代码实现在本文中,将详细介绍如何将BME280传感器数据上传到InfluxDB中,方便后期数据处理。 1、BM280和InfluxDB介绍 InfluxDB…

tracert命令

前言&#xff1a;今天在阅读“Web性能权威指南”这本书的时候&#xff0c;发现 tracert 这个命令挺有意思的&#xff0c;在分析网络性能瓶颈的时候也能使用的到&#xff0c;在此就小记一笔以备后用。 1&#xff1a;作用 tracert 是一个简单的网络诊断工具&#xff0c;可以列出…

如何在Windows 10中进行屏幕截图

本文介绍如何在Windows 10中捕获屏幕截图&#xff0c;包括使用键盘组合、使用Snipping Tool、Snipp&Sketch Tool或Windows游戏栏。 使用打印屏幕在Windows 10中捕获屏幕截图 在Windows 10中捕获屏幕截图的最简单方法是按下键盘上的PrtScWindows键盘组合。你将看到屏幕短暂…

python自动化第一篇—— 带图文的execl的自动化合并

简述 最近接到一个需求&#xff0c;需要为公司里的一个部门提供一个文件上传自动化合并的系统&#xff0c;以供用户稽核&#xff0c;谈到自动化&#xff0c;肯定是选择python&#xff0c;毕竟python的轮子多。比较了市面上几个用得多的python库&#xff0c;我最终选择了xlwings…

centos 6.10 安装 python3.10.5 和 openssl1.1.1

安装 openssl centos 6.10 自带的 openssl 版本太老了&#xff0c;要安装 1.0.2以上的版本。 如果不安装 openssl&#xff0c;python 的 pip 无法联网。 下载 wget https://link.juejin.cn/?targethttps%3A%2F%2Fwww.openssl.org%2Fsource%2Fopenssl-1.1.1h.tar.gz如果虚拟…

Rust5.2 Generic Types, Traits, and Lifetimes

Rust学习笔记 Rust编程语言入门教程课程笔记 参考教材: The Rust Programming Language (by Steve Klabnik and Carol Nichols, with contributions from the Rust Community) Lecture 10: Generic Types, Traits, and Lifetimes lib.rs use std::fmt::Display;//Traits: …

8. 深度学习——NLP

机器学习面试题汇总与解析——NLP 本章讲解知识点 什么是 NLP循环神经网络(RNN)RNN 变体Attention 机制RNN 反向传播推导LSTM 与 GRUTransformerBertGPT分词算法分类CBOW 模型与 Skip-Gram 模型本专栏适合于Python已经入门的学生或人士,有一定的编程基础。本专栏适合于算法…

Nginx(五) break,if,return,rewrite和set指令的执行顺序深究

本篇文章主要对break&#xff0c;if&#xff0c;return&#xff0c;rewrite和set这5个指令的执行顺序进行深究&#xff0c;如需了解这5个指令的功能和配置&#xff0c;请参考另一篇文章 Nginx(三) 配置文件详解 由于文章篇幅较长&#xff0c;所以我就先把结论贴出来&#xff0c…

将按键放到输入框内:

如何将将Button放到输入框内&#xff1f; 效果图&#xff1a; 步骤如下&#xff1a; button 外围用template 包裹一层 <template #suffix v-if"row.WorkerRole TPM"> <el-inputtype"text"v-model"row.JobNumber"placeholder"…

云原生下GIS服务规划与设计

作者&#xff1a;lisong 目录 背景云原生环境下GIS服务的相关概念GIS服务在云原生环境下的规划调度策略GIS服务在云原生环境下的调度手段GIS服务在云原生环境下的服务规划调度实践 背景 作为云原生GIS系统管理人员&#xff0c;在面对新建的云GIS系统时&#xff0c;通常需要应对…

第27期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

使用 PYTORCH 进行图像风格迁移

一、介绍 本教程介绍如何实现 由 Leon A. Gatys、Alexander S. Ecker 和 Matthias Bethge 开发的神经风格算法。神经风格或神经传输允许您拍摄图像并以新的艺术风格再现它。该算法采用三幅图像&#xff0c;即输入图像、内容图像和风格图像&#xff0c;并将输入更改为类似于内容…

Python框架篇(1):FastApi-快速入门

1.介绍 前言: 不管学什么语言&#xff0c;都应该至少掌握一个框架&#xff0c;方面我们后续&#xff0c;进行服务部署、服务对外支持等; 1.1 官网介绍 下面是来自FastAPI官网的介绍: FastAPI 是一个用于构建 API 的现代、快速&#xff08;高性能&#xff09;的 web 框架&#…

为忙碌的软件工程师精心准备的编码面试准备材料,超过 100,000 人受益!

这是一个针对技术面试准备的手册。它收集了大量的面试问题和答案&#xff0c;涵盖了算法、系统设计、前端等主题&#xff0c;并且还在不断更新和完善中。 这个项目是“Tech Interview Handbook”&#xff0c;解决了求职者在技术面试中遇到的各种难题&#xff0c;帮助他们更好地…

将scut-seg标签转化成通用coco标签

行人实例分割 import json import osdef calculate_bounding_rectangle(coordinates):# 提取x和y坐标的列表x_coords [coord[0] for coord in coordinates]y_coords [coord[1] for coord in coordinates]# 计算矩形的左上角坐标min_x min(x_coords)min_y min(y_coords)# 计…

C++ Qt 学习(六):Qt http 编程

1. http 基础 HTTP 基础教程C Web 框架 drogonoatpp 2. C Qt 用户登录、注册功能实现 login_register.h #pragma once#include <QtWidgets/QDialog> #include "ui_login_register.h" #include <QNetworkReply>class login_register : public QDialog…

开源网安受邀参加网络空间安全合作与发展论坛,为软件开发安全建设献计献策

​11月10日&#xff0c;在广西南宁举办的“2023网络空间安全合作与发展论坛”圆满结束。论坛在中国兵工学会的指导下&#xff0c;以“凝聚网络空间安全学术智慧&#xff0c;赋能数字经济时代四链融合”为主题&#xff0c;邀请了多位专家及企业代表共探讨网络安全发展与数字经济…

《网络协议》05. 网络通信安全 · 密码技术

title: 《网络协议》05. 网络通信安全 密码技术 date: 2022-09-10 15:16:15 updated: 2023-11-12 07:03:52 categories: 学习记录&#xff1a;网络协议 excerpt: 网络通信安全&#xff08;ARP 欺骗&#xff0c;DoS & DDoS&#xff0c;SYN 洪水攻击&#xff0c;LAND 攻击&a…

MVC使用的设计模式

MVC使用的设计模式 一、背景 MVC模式是"Model-View-Controller"的缩写&#xff0c;中文翻译为"模式-视图-控制器"。MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View&#xff0c;或者同时改变两者。只要Controller改变了Model…

计算机、通信及信号处理领域各单位的期刊与会议分级

中国计算机学会推荐国际学术会议和期刊目录-2022 CCF2022分类下载地址 清华大学计算机学科群推荐学术会议和期刊列表&#xff08;TH-CPL-2019&#xff09; TH-CPL2019下载地址 北京大学高能效计算与应用中心A类论文源-2016 CECA分级链接 中国通信学会《信息通信领域高质量科…