当前位置: 首页 > news >正文

聊聊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的桌面操作系统&#xff08;Kylin-Desktop-V10-Professional-Release-Build1-210203-X86_64&#xff09; 安装前准备 1、先搞清楚自己的电脑类型 A MBR传统bios单硬盘 B MBR 传统bios双硬盘&#xff08;SSD固态硬盘机械硬盘&…...

file_put_contents锁的问题

记一次线上生产file_put_contents锁的问题 php项目&#xff0c;很多地方加了日志记录&#xff0c;方法为 function logstr($namelog,$str"",$type"Ymd"){$file date("$type")._.$name..log;$add __DIR__./../runtime/cuslog/.date("Ym&q…...

工作中积累的对K8s的就绪和存活探针的一些认识

首先&#xff0c;我的项目是基于 Spring Boot 2.3.5 的&#xff0c;并依赖 spring-boot-starter-actuator 提供的 endpoints 来实现就绪和存活探针&#xff0c;POM 文件如下图&#xff1a; 下面&#xff0c;再让我们来看下与该项目对应的Deployment的YAML文件&#xff0c;如下…...

什么是会话固定以及如何在 Node.js 中防止它

什么是会话固定以及如何在 Node.js 中防止它 在深入讨论之前&#xff0c;我们需要了解会话是什么以及会话身份验证如何工作。 什么是会话&#xff1f; 正如我们所知&#xff0c;HTTP 请求是无状态的&#xff0c;这意味着当我们发送登录请求时&#xff0c;并且我们有有效的用…...

代码随想录算法训练营第五十二天|300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

第九章 动态规划part13 300. 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数…...

使用 Hugging Face Transformer 微调 BERT

微调 BERT有助于将其语言理解能力扩展到更新的文本领域。BERT 的与众不同之处在于它能够掌握句子的上下文关系,理解每个单词相对于其邻居的含义。我们将使用 Hugging Face Transformers 训练 BERT,还将教 BERT 分析 Arxiv 的摘要并将其分类为 11 个类别之一。 为什么微调 BER…...

Vue原型对象

原型对象 prototype 称为&#xff1a;显示的原型属性&#xff0c;用法&#xff1a;函数.prototype&#xff0c;例如&#xff1a;Vue.prototype __proto__称为&#xff1a;隐式的原型属性&#xff0c;用户&#xff1a;实例.proto&#xff0c;例如&#xff1a;vm.proto 不管如何 …...

向量数据库的分类概况

保存和检索矢量数据的五种方法&#xff1a; 像 Pinecone 这样的纯矢量数据库 全文搜索数据库&#xff0c;例如 ElasticSearch 矢量库&#xff0c;如 Faiss、Annoy 和 Hnswlib 支持矢量的NoSQL 数据库&#xff0c;例如 MongoDB、Cosmos DB 和 Cassandra 支持矢量的SQL 数据库&am…...

工业镜头的类别

工业镜头的类别 按照等效焦距分为&#xff1a; 广角镜头 中焦距镜头 长焦距镜头 广角镜头 等效焦距小于标准镜头&#xff08;等效焦距为50mm&#xff09;的镜头。特点是最小工作距离短&#xff0c;景深大&#xff0c;视角大。常常表现为桶形畸变。 中焦距镜头 焦距介于广角镜…...

实验11 SQL互联网业务查询-2

这就是SQL题带给我的自信&#x1f615; 可能发题解到博客上&#xff0c;主要是写完一遍实在不想看第二遍&#xff0c;太长了&#xff0c;优化都不想优化&#xff0c;看着头疼。 技术栈 – WhiteNights Site 一 USE mydata; #请在此处添加实现代码 ########## Begin #######…...

C++知识点梳理:C++ templates

c模板包括&#xff1a;类模板、类&#xff08;非模板类和模板类&#xff09;方法模板、函数模板、别名模板、变量模板。 类模板模板参数列表说明&#xff1a; 1&#xff09;类定义 仅模板参数列表声明&#xff0c;template<>行。 类名后无需参数说明<>。 2&#xf…...

uniapp form表单提交事件手动调用

背景&#xff1a; UI把提交的按钮弄成了图片&#xff0c;之前的button不能用了。 <button form-type"submit">搜索</button> 实现&#xff1a; html&#xff1a; 通过 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 分片检查点&#xff08;Sharded checkpoints&#xff09;2.4 示例&#xff1a;使用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网站&#xff0c;登录口爆破发现存在弱口令admin&#xff1a;password 3.抓包&#xff0c;发现请求体是XML格式 4.尝试使…...

android studio导入eclipse项目

网上下载一个老工程&#xff0c;.project文件里有eclipse。 android studio导入eclipse项目 eclipse项目结构 Android studio文件结构 下面是导入步骤&#xff1a; 第一步&#xff0c;打开一个项目。 选择File->New->Import Project 第二步&#xff0c;选择Eclipse项目根…...

如何利用AI实现银行存量客户的营销?

近年来&#xff0c;大数据、人工智能等热门关键字多次被写入中央文件与国务院政府工作报告&#xff0c;目前已上升为国家战略&#xff0c;并将深刻地改变现有行业的游戏规则。 金融行业是当今大数据、人工智能应用最广、最深的领域之一。随着数据仓库和数据科学的发展&#xff…...

springboot327基于Java的医院急诊系统

交流学习&#xff1a; 更多项目&#xff1a; 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示&#xff1a; ————————————————...

Unity3d 导入中文字体转TMPtext asset

外部字体放入unity仓库以后呢&#xff0c;需要把这个字体转成用立体的字体文件才可以被使用&#xff01; 要想转换的话呢先放入仓库对字体点右键上面有一个Create创建里面有一个TEXT Asset&#xff0c;创建好就可以使用了...

云积万相,焕发电商店铺新活力

数字化时代&#xff0c;电商店铺的运营和营销策略越来越受到重视。如何让店铺在众多的竞争中脱颖而出&#xff0c;吸引更多的顾客&#xff0c;提高销售额&#xff0c;是每个电商品牌都需要思考的问题。云积天赫最近推出的云积万相为电商店铺带来全新的活力和更多的可能性。   …...

字典管理怎么使用,vue3项目使用若依的的字典管理模块

若依框架数据字典的使用_若依数据字典_哈哈水水水水的博客-CSDN博客 【精选】关于数据字典的理解与设计_数据字典怎么设计-CSDN博客 若依的字典值如何使用&#xff08;超详细图文教程&#xff09;_若依字典管理_丿BAIKAL巛的博客-CSDN博客 Vue3组合式API&#xff1a;getCurr…...

【汇编】内存中字的存储、用DS和[address]实现字的传送、DS与数据段

文章目录 前言一、内存中字的存储1.1 8086cpu字的概念1.2 16位的字存储在一个16位的寄存器中&#xff0c;如何存储&#xff1f;1.3 字单元 二、用DS和[address]实现字的传送2.1 字的传送是什么意思&#xff1f;2.2 要求原理解决方案&#xff1a;DS和[address]配合8086传送16字节…...

数据分析 - 分散性与变异的量度

全距 - 极差 处理变异性 方差度量 数值与均值的距离&#xff0c;也就是数据的差异性 标准差描述&#xff1a;典型值 和 均值的距离的方法&#xff0c;数据与均值的分散情况...

Neo4j数据库介绍及简单使用

图数据库介绍 图数据库是一种专门设计用于存储和管理图形数据的数据库类型。在图数据库中&#xff0c;数据以图的形式表示&#xff0c;其中节点表示实体&#xff0c;边表示实体之间的关系。这种表示方式非常适合处理具有复杂关系的数据&#xff0c;如社交网络、推荐系统、网络…...

ubuntu 20.04安装 Anaconda教程

在安装Anaconda之前需要先安装ros(防止跟conda冲突&#xff0c;先装ros)。提前安装好cuda 和cudnn。 本博客参考&#xff1a;ubuntu20.04配置ros noetic和cuda&#xff0c;cudnn&#xff0c;anaconda&#xff0c;pytorch深度学习的环境 安装完conda后&#xff0c;输入: pyth…...

iframe渲染后端接口文件和实现下载功能

一&#xff1a;什么是iframe&#xff1f; 1、介绍 iframe 是HTML 中的一种标签&#xff0c;全称为 Inline Frame&#xff0c;即内联框架。它可以在网页中嵌入其他页面或文档&#xff0c;将其他页面的内容以框架的形式展示在当前页面中。iframe的使用方式是通过在HTML文档中插入…...

广西建筑工地模板:支模九层桉木模板

广西作为中国西南地区的重要建筑市场&#xff0c;建设工地的模板需求量一直居高不下。在众多建筑模板中&#xff0c;支模九层桉木模板以其强度高、使用寿命长的特点而备受关注。本文将介绍广西建筑工地常用的支模九层桉木模板&#xff0c;并探讨其在建筑施工中的应用优势。支模…...

java集合,栈

只有栈是类 列表是个接口 栈是个类 队列 接口有双链表,优先队列(堆) add会报错 offer是一个满了不会报错 set集合 有两个类实现了这个接口...

Ubuntu 20.04 LTS ffmpeg gif mp4 互转 许编译安装ffmpeg ;解决gif转mp4转换后无法播放问题

安装ffmpeg apt install ffmpeg -y gif转mp4 ffmpeg -f gif -i ldh.gif ldh.mp4 故障&#xff1a;生成没报错&#xff0c;但mp4无法播放&#xff0c;体积也不正常 尝试编译安装最新版 sudo apt install -y yasm axel -n 100 https://ffmpeg.org/releases/ffmpeg-6.0.1.tar.x…...

【Nginx】使用nginx进行反向代理与负载均衡

使用场景 反向代理&#xff1a;一个网站由许多服务器承载的&#xff0c;网站只暴露一个域名&#xff0c;那么这个域名指向一个代理服务器ip&#xff0c;然后由这台代理服务器转发请求到网站负载的多台服务器中的一台处理。这就需要用到Nginx的反向代理实现了 负载均衡&#xf…...