聊聊logback的MDCFilter
序
本文主要研究一下logback的MDCFilter
MatchingFilter
ch/qos/logback/classic/turbo/MatchingFilter.java
public abstract class MatchingFilter extends TurboFilter {protected FilterReply onMatch = FilterReply.NEUTRAL;protected FilterReply onMismatch = FilterReply.NEUTRAL;final public void setOnMatch(String action) {if ("NEUTRAL".equals(action)) {onMatch = FilterReply.NEUTRAL;} else if ("ACCEPT".equals(action)) {onMatch = FilterReply.ACCEPT;} else if ("DENY".equals(action)) {onMatch = FilterReply.DENY;}}final public void setOnMismatch(String action) {if ("NEUTRAL".equals(action)) {onMismatch = FilterReply.NEUTRAL;} else if ("ACCEPT".equals(action)) {onMismatch = FilterReply.ACCEPT;} else if ("DENY".equals(action)) {onMismatch = FilterReply.DENY;}}
}
MatchingFilter继承了TurboFilter,它提供了setOnMatch及setOnMismatch方法,它们在action为NEUTRAL、ACCEPT、DENY时设置对应的onMatch、onMismatch
MDCFilter
ch/qos/logback/classic/turbo/MDCFilter.java
public class MDCFilter extends MatchingFilter {String MDCKey;String value;@Overridepublic void start() {int errorCount = 0;if (value == null) {addError("\'value\' parameter is mandatory. Cannot start.");errorCount++;}if (MDCKey == null) {addError("\'MDCKey\' parameter is mandatory. Cannot start.");errorCount++;}if (errorCount == 0)this.start = true;}@Overridepublic FilterReply decide(Marker marker, Logger logger, Level level, String format, Object[] params, Throwable t) {if (!isStarted()) {return FilterReply.NEUTRAL;}String value = MDC.get(MDCKey);if (this.value.equals(value)) {return onMatch;}return onMismatch;}public void setValue(String value) {this.value = value;}public void setMDCKey(String MDCKey) {this.MDCKey = MDCKey;}}
MDCFilter继承了MatchingFilter,其start方法校验MDCKey及value属性是否有值,其decide方法跟从MDC获取指定key的值,然后判断该值域value是否相等,相等则返回onMatch,否则返回onMismatch
示例
<?xml version="1.0" encoding="UTF-8" ?><configuration><turboFilter class="ch.qos.logback.classic.turbo.MDCFilter"><MDCKey>username</MDCKey><Value>sebastien</Value><OnMatch>ACCEPT</OnMatch></turboFilter><turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter"><Marker>billing</Marker><OnMatch>DENY</OnMatch></turboFilter><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><layout class="ch.qos.logback.classic.PatternLayout"><Pattern>%date [%thread] %-5level %logger - %msg%n</Pattern></layout></appender><root level="info"><appender-ref ref="console" /></root>
</configuration>
小结
logback提供了MDCFilter,它可以根据指定的MDCKey从MDC取值,然后根据配置的value进行判断,然后执行onMatch或者onMismatch来决定是否打印日志。
相关文章:
聊聊logback的MDCFilter
序 本文主要研究一下logback的MDCFilter MatchingFilter ch/qos/logback/classic/turbo/MatchingFilter.java public abstract class MatchingFilter extends TurboFilter {protected FilterReply onMatch FilterReply.NEUTRAL;protected FilterReply onMismatch FilterR…...
Windows10安装麒麟桌面V10双系统
概述 想要在Windows10操作系统中安装麒麟V10的桌面操作系统(Kylin-Desktop-V10-Professional-Release-Build1-210203-X86_64) 安装前准备 1、先搞清楚自己的电脑类型 A MBR传统bios单硬盘 B MBR 传统bios双硬盘(SSD固态硬盘机械硬盘&…...
file_put_contents锁的问题
记一次线上生产file_put_contents锁的问题 php项目,很多地方加了日志记录,方法为 function logstr($namelog,$str"",$type"Ymd"){$file date("$type")._.$name..log;$add __DIR__./../runtime/cuslog/.date("Ym&q…...
工作中积累的对K8s的就绪和存活探针的一些认识
首先,我的项目是基于 Spring Boot 2.3.5 的,并依赖 spring-boot-starter-actuator 提供的 endpoints 来实现就绪和存活探针,POM 文件如下图: 下面,再让我们来看下与该项目对应的Deployment的YAML文件,如下…...
什么是会话固定以及如何在 Node.js 中防止它
什么是会话固定以及如何在 Node.js 中防止它 在深入讨论之前,我们需要了解会话是什么以及会话身份验证如何工作。 什么是会话? 正如我们所知,HTTP 请求是无状态的,这意味着当我们发送登录请求时,并且我们有有效的用…...
代码随想录算法训练营第五十二天|300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
第九章 动态规划part13 300. 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数…...
使用 Hugging Face Transformer 微调 BERT
微调 BERT有助于将其语言理解能力扩展到更新的文本领域。BERT 的与众不同之处在于它能够掌握句子的上下文关系,理解每个单词相对于其邻居的含义。我们将使用 Hugging Face Transformers 训练 BERT,还将教 BERT 分析 Arxiv 的摘要并将其分类为 11 个类别之一。 为什么微调 BER…...
Vue原型对象
原型对象 prototype 称为:显示的原型属性,用法:函数.prototype,例如:Vue.prototype __proto__称为:隐式的原型属性,用户:实例.proto,例如:vm.proto 不管如何 …...
向量数据库的分类概况
保存和检索矢量数据的五种方法: 像 Pinecone 这样的纯矢量数据库 全文搜索数据库,例如 ElasticSearch 矢量库,如 Faiss、Annoy 和 Hnswlib 支持矢量的NoSQL 数据库,例如 MongoDB、Cosmos DB 和 Cassandra 支持矢量的SQL 数据库&am…...
工业镜头的类别
工业镜头的类别 按照等效焦距分为: 广角镜头 中焦距镜头 长焦距镜头 广角镜头 等效焦距小于标准镜头(等效焦距为50mm)的镜头。特点是最小工作距离短,景深大,视角大。常常表现为桶形畸变。 中焦距镜头 焦距介于广角镜…...
实验11 SQL互联网业务查询-2
这就是SQL题带给我的自信😕 可能发题解到博客上,主要是写完一遍实在不想看第二遍,太长了,优化都不想优化,看着头疼。 技术栈 – WhiteNights Site 一 USE mydata; #请在此处添加实现代码 ########## Begin #######…...
C++知识点梳理:C++ templates
c模板包括:类模板、类(非模板类和模板类)方法模板、函数模板、别名模板、变量模板。 类模板模板参数列表说明: 1)类定义 仅模板参数列表声明,template<>行。 类名后无需参数说明<>。 2…...
uniapp form表单提交事件手动调用
背景: UI把提交的按钮弄成了图片,之前的button不能用了。 <button form-type"submit">搜索</button> 实现: html: 通过 this.$refs.fd 获取到form的vue对象。手动调用里面的_onSubmit()方法。 methods:…...
Accelerate 0.24.0文档 三:超大模型推理(内存估算、Sharded checkpoints、bitsandbytes量化、分布式推理)
文章目录 一、内存估算1.1 Gradio Demos1.2 The Command 二、使用Accelerate加载超大模型2.1 模型加载的常规流程2.2 加载空模型2.3 分片检查点(Sharded checkpoints)2.4 示例:使用Accelerate推理GPT2-1.5B2.5 device_map 三、bitsandbytes量…...
HackTheBox-Starting Point--Tier 2---Markup
文章目录 一 Markup测试过程1.1 打点1.2 权限获取1.3 权限升级 二 题目 一 Markup测试过程 1.1 打点 1.端口扫描 nmap -A -Pn -sC 10.129.95.1922.访问web网站,登录口爆破发现存在弱口令admin:password 3.抓包,发现请求体是XML格式 4.尝试使…...
android studio导入eclipse项目
网上下载一个老工程,.project文件里有eclipse。 android studio导入eclipse项目 eclipse项目结构 Android studio文件结构 下面是导入步骤: 第一步,打开一个项目。 选择File->New->Import Project 第二步,选择Eclipse项目根…...
如何利用AI实现银行存量客户的营销?
近年来,大数据、人工智能等热门关键字多次被写入中央文件与国务院政府工作报告,目前已上升为国家战略,并将深刻地改变现有行业的游戏规则。 金融行业是当今大数据、人工智能应用最广、最深的领域之一。随着数据仓库和数据科学的发展ÿ…...
springboot327基于Java的医院急诊系统
交流学习: 更多项目: 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示: ————————————————...
Unity3d 导入中文字体转TMPtext asset
外部字体放入unity仓库以后呢,需要把这个字体转成用立体的字体文件才可以被使用! 要想转换的话呢先放入仓库对字体点右键上面有一个Create创建里面有一个TEXT Asset,创建好就可以使用了...
云积万相,焕发电商店铺新活力
数字化时代,电商店铺的运营和营销策略越来越受到重视。如何让店铺在众多的竞争中脱颖而出,吸引更多的顾客,提高销售额,是每个电商品牌都需要思考的问题。云积天赫最近推出的云积万相为电商店铺带来全新的活力和更多的可能性。 …...
OneMore:如何通过160+个功能命令彻底改变你的OneNote使用体验
OneMore:如何通过160个功能命令彻底改变你的OneNote使用体验 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore OneMore是一款专为OneNote设计的强大插件&…...
Worldquant研究顾问速通
几天时间速通拿了金牌,中间停了一两周,然后仔细研究了下,学了相关知识,搭建自己ai驱动的工作流后每天大约10分钟设置好任务,可探索到10来个可以提交的alpha,目前产出比大约在1/100,simulate100个…...
Codex入门第一步,5个基础设置,修改后让性价比翻倍!(附通用提示词模板)
开篇Codex App 主界面:对话框底部显示权限档位、工作区、本地模式和分支信息 Codex 现在不只是程序员的工具——不少非技术背景的职场人把它当"数字同事":整理文件、查资料、跑浏览器抓数据。 但十个有八个,装好之后还是对着对话框…...
SAP LeanIX: 从“手工台账”到“EA中枢“
在上一篇文章中,我们跟着PumpTech走完了一整圈——从体检、找堵点、数据验证,到画目标蓝图、排路线图。最后我们提炼了一套“五步法”和一个“三维评估矩阵”,算是把EA方法论从书本拽到了地上。 但故事讲完后,有一个问题始终悬而…...
AI时代什么建站软件功能强大?从GEO流量重构看CMS的智慧进化
2026年,互联网的底层逻辑正在发生一场“静默革命”。如果你的思维还停留在“建一个网站只是为了有个官网给客户看”,那么你可能正在被时代抛弃。当下的AI已经不仅仅是一个聊天工具,它正在重构整个信息的传播秩序。传统的SEO(搜索引…...
用wireshark抓取分析EtherCAT报文
📜 第1章:EtherCAT报文结构 EtherCAT报文结构及Wireshark对应显示: 以太网帧头:14字节,包含目标/源MAC地址,帧类型 (EtherType) 固定为 0x88A4。EtherCAT帧头:2字节,包含一个11位的“…...
GitHub Copilot X:AI编程助手如何重塑开发工作流与效率
1. 项目概述:当代码编辑器遇见“副驾驶”如果你和我一样,每天有超过一半的时间是在代码编辑器里度过的,那你一定对“效率”这个词有着近乎偏执的追求。从语法高亮、代码补全,到后来的LSP(Language Server Protocol&…...
Windows 11终极优化指南:Win11Debloat一键提升51%系统性能
Windows 11终极优化指南:Win11Debloat一键提升51%系统性能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter an…...
用 MinIO 搭建 S3 兼容对象存储服务
用 MinIO 搭建 S3 兼容对象存储服务 分类:开源项目部署 MinIO 适合附件、备份归档和 S3 兼容对象文件。这类主题真正跑起来并不难,难的是上线后稳定、可备份、能排错。本文按实操方式整理一套可以直接落地的流程,默认你已经会登录 Linux 服务…...
气动黄油机核心技术解析:泵的选择与厂家评估方法论
工业黄油就是润滑脂,属于半固体润滑剂,润滑脂的作用主要是润滑、保护和密封。可以有效降低机械摩擦,防止磨损,同时还能防腐蚀及密封防尘。毫不夸张的说,润滑脂就是万金油,黄油加注机广泛应用于汽车制造业、…...
