logback 日志脱敏
工具类
CustomLogbackPatternLayoutEncoder.java
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;public class CustomLogbackPatternLayoutEncoder extends PatternLayoutEncoder {/*** 正则替换规则*/private LogbackReplaces replaces;/*** 使用自定义 MyLogbackPatternLayout 格式化输出*/@Overridepublic void start() {CustomPatternLayout patternLayout = new CustomPatternLayout(replaces);patternLayout.setContext(context);patternLayout.setPattern(this.getPattern());patternLayout.setOutputPatternAsHeader(outputPatternAsHeader);patternLayout.start();this.layout = patternLayout;started = true;}public LogbackReplaces getReplaces() {return replaces;}public void setReplaces(LogbackReplaces replaces) {this.replaces = replaces;}
}
CustomPatternLayout.java
import ch.qos.logback.classic.PatternLayout;
import ch.qos.logback.classic.spi.ILoggingEvent;
import lombok.extern.slf4j.Slf4j;@Slf4j
public class CustomPatternLayout extends PatternLayout {/*** 正则替换规则*/private final LogbackReplaces replaces;public CustomPatternLayout(LogbackReplaces replaces) {super();this.replaces = replaces;}/*** 格式化日志信息** @param event ILoggingEvent* @return 日志信息*/@Overridepublic String doLayout(ILoggingEvent event) {// 占位符填充String msg = super.doLayout(event);// 脱敏处理return this.buildSensitiveMsg(msg);}/*** 根据配置对日志进行脱敏** @param msg 消息* @return 脱敏后的日志信息*/public String buildSensitiveMsg(String msg) {if (this.replaces == null || this.replaces.getReplace() == null || this.replaces.getReplace().isEmpty()) {log.error("日志脱敏开启,但未配置脱敏规则,请检查配置后重试");return msg;}String sensitiveMsg = msg;for (RegexReplacement replace : this.replaces.getReplace()) {// 遍历脱敏正则 & 替换敏感数据sensitiveMsg = replace.format(sensitiveMsg);}return sensitiveMsg;}
}
RegexReplacement.java
import java.util.regex.Pattern;public class RegexReplacement {/*** 脱敏匹配正则*/private Pattern regex;/*** 替换正则*/private String replacement;/*** Perform the replacement.** @param msg The String to match against.* @return the replacement String.*/public String format(final String msg) {return regex.matcher(msg).replaceAll(replacement);}public Pattern getRegex() {return regex;}public void setRegex(String regex) {this.regex = Pattern.compile(regex);}public String getReplacement() {return replacement;}public void setReplacement(String replacement) {this.replacement = replacement;}
}
LogbackReplaces.java
import java.util.ArrayList;
import java.util.List;public class LogbackReplaces {/*** 脱敏正则列表*/private List<RegexReplacement> replace = new ArrayList<>();/*** 添加规则(因为replace类型是list,必须指定addReplace方法用以添加多个)** @param replacement replacement*/public void addReplace(RegexReplacement replacement) {replace.add(replacement);}public List<RegexReplacement> getReplace() {return replace;}public void setReplace(List<RegexReplacement> replace) {this.replace = replace;}
}
配置文件logback.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="6000"><!--输出到控制台--><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder class="CustomLogbackPatternLayoutEncoder类路径"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t][%p][%c][%M][%L]-> [%m]%n</Pattern><!-- 脱敏规则列表 --><replaces><!-- 脱敏规则 --><replace><!-- 邮箱,保留@前的前1后1 --><regex><![CDATA[(\w+)([-+.]\w+)@(\w+([-.]\w+)).(\w+([-.]\w+)*)]]></regex><replacement>$1****@$3.$4</replacement></replace><replace><!-- 11位的手机号:保留前3后4 --><regex><![CDATA[(1)([3-9])(\d)(\d{4})(\d{4})]]></regex><replacement>$1$2$3****$5</replacement></replace><replace><!-- 固定电话: XXXX-XXXXXXXX或XXX-XXXXXXXX,保留区号+前2后2 --><regex><![CDATA[([\d]{3,4}-)(\d{2})(\d{4})(\d{2})]]></regex><replacement>$1$2****$4</replacement></replace><replace><!-- security自带测试密码--><regex><![CDATA[.*(Using generated security).*]]></regex><replacement></replacement></replace><replace><!--ip --><regex><![CDATA[(?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])(?![0-9])]]></regex><replacement>***</replacement></replace></replaces></encoder></appender><!-- 按照每天生成日志文件 --><appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><FileNamePattern>${user.home}/logs/admin/app.%d{yyyy-MM-dd}-%i.log</FileNamePattern><MaxHistory>15</MaxHistory><!--日志文件最大的大小--><MaxFileSize>100MB</MaxFileSize><totalSizeCap>5GB</totalSizeCap></rollingPolicy><encoder class="CustomLogbackPatternLayoutEncoder类路径"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><replaces><replace><!-- 邮箱,保留@前的前1后1 --><regex><![CDATA[(\w+)([-+.]\w+)@(\w+([-.]\w+)).(\w+([-.]\w+)*)]]></regex><replacement>$1****@$3.$4</replacement></replace><replace><!-- 11位的手机号:保留前3后4 --><regex><![CDATA[(1)([3-9])(\d)(\d{4})(\d{4})]]></regex><replacement>$1$2$3****$5</replacement></replace><replace><!-- 固定电话: XXXX-XXXXXXXX或XXX-XXXXXXXX,保留区号+前2后2 --><regex><![CDATA[([\d]{3,4}-)(\d{2})(\d{4})(\d{2})]]></regex><replacement>$1$2****$4</replacement></replace><replace><!-- security自带测试密码--><regex><![CDATA[.*(Using generated security).*]]></regex><replacement></replacement></replace><replace><!--ip --><regex><![CDATA[(?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])(?![0-9])]]></regex><replacement>***</replacement></replace></replaces></encoder></appender><!--log4jdbc --><logger name="org.apache.ibatis" level="debug"/><logger name="java.sql" level="debug"/><root level="info"><appender-ref ref="console"/><appender-ref ref="file"/></root></configuration>
相关文章:
logback 日志脱敏
工具类 CustomLogbackPatternLayoutEncoder.java import ch.qos.logback.classic.encoder.PatternLayoutEncoder;public class CustomLogbackPatternLayoutEncoder extends PatternLayoutEncoder {/*** 正则替换规则*/private LogbackReplaces replaces;/*** 使用自定义 MyLog…...
element-ui的表单中,输入框、级联选择器的长度设置
使用<el-col>控制输入框的长度 <el-form-item label"姓名" label-width"80px"><el-col :span"15"><el-input v-model"form.name" autocomplete"off"></el-input></el-col></el-form…...
深入了解 npm:Node.js 包管理工具详解
文章目录 一、npm 基本概念1.1 什么是 npm?1.2 package.json 文件 二、npm 常用命令2.1 初始化项目2.2 安装依赖2.2.1 安装单个包2.2.2 全局安装包2.2.3 安装开发依赖 2.3 移除依赖2.4 更新依赖2.5 查看已安装的包2.6 发布包 三、npm 高级用法3.1 使用 npm scripts3…...
记一次跨域问题
线上跨域问题,在自己配置确认没问题下,要及时找运维看看是不是nginx配置问题。 两个方面: 项目代码 nginx配置 SpringBoot 解决跨域问题的 5 种方案! SpringBoot解决CORS跨域问题 SpringBoot-实现CORS跨域原理及解决方案...
第9章 负载均衡集群日常维护
一个设计良好的高可用负载均衡集群,交付使用以后并不能一劳永逸。欲使其高效、稳定、持续对外服务,日常维护必不可少。 对于高可用负载均衡集群来说,有两种类型的维护形式:常规性维护与突发性维护。突发性维护一般指故障处理&…...
鸿蒙内核源码分析(消息封装篇) | 剖析LiteIpc(上)进程通讯内容
基本概念 LiteIPC是OpenHarmony LiteOS-A内核提供的一种新型IPC(Inter-Process Communication,即进程间通信)机制,为轻量级进程间通信组件,为面向服务的系统服务框架提供进程间通信能力,分为内核实现和用户…...
Charger之三动态电源路径管理(DPPM)
-----本文简介----- 主要内容包括: 领资料:点下方↓名片关注回复:粉丝群 硬件之路学习笔记公众号 Charger的动态电源路径管理(DPPM) 前篇内容:①电池管理IC(Charger)了解一下&…...
大数据模型的选择与安装
大数据模型的选择和安装是一个复杂的过程,涉及多个因素,包括模型的通用能力、特定任务的性能、数据效率、评估完整性、成本以及部署的硬件和软件环境。以下是一些关于大数据模型选择与安装的考虑因素和步骤: 选择大数据模型的考虑因素&#…...
React 之 lazy(延迟加载)(十七)
lazy 能够让你在组件第一次被渲染之前延迟加载组件的代码。 在组件外部调用 lazy,以声明一个懒加载的 React 组件: import { lazy } from react;const MarkdownPreview lazy(() > import(./MarkdownPreview.js)); 配合 Suspense 实现懒加载组件 //App.js imp…...
Node.js -- 会话控制
文章目录 1. 会话介绍2. cookie 相关操作2.1 cookie 设置2.2 删除 cookie2.3 获取cookie 3. session 相关操作4. cookie 和session 的区别5. 补充知识 -- CSRF跨站请求伪造6. token 1. 会话介绍 所谓会话控制就是对会话进行控制 HTTP是一种无状态的协议,它没有办法…...
做抖店不能踩的几个坑,新手要照做,老玩家要听劝~
我是王路飞。 很多人都说抖店的运营很简单,选选品、对接一下达人,就可以坐等店铺出单了。 这话骗骗还没开店的小白也就得了,但凡做抖店超过一个月的,都不会相信这句话。 细心耐心是做抖店最基本的态度。 拿到一个好结果的前提…...
【Kibana】快速上手Kibana平台(KQL)
文章目录 快速使用Kibana平台常用查询语句KQL基本查询覆合查询模糊查询 目前市面上大部分的公司的日志系统都是使用ELK系统,因此我们进行工作必须得掌握Kibana平台的基本使用,这里主要说明怎么“快速使用Kibana平台”以及记录一些常用的“KQL语言”。 快…...
全方位入门git-慕课网 笔记
目录 【上传github忽略某些文件】【配置用户名和邮箱】【想要删除不需要的文件时如何进行操作】【想要给文件重命名如何操作】【想要移动文件到其他位置时如何操作】【文件有变化时,如何查看前后变化】【操作失误的情况下如何实现一键还原】【不再追踪时如何实现撤销…...
使用 Docker 部署 TaleBook 私人书籍管理系统
1)项目介绍 GitHub:https://github.com/talebook/talebook Talebook 是一个简洁但强大的私人书籍管理系统。它基于 Calibre 项目构建,具备书籍管理、在线阅读与推送、用户管理、SSO 登录、从百度/豆瓣拉取书籍信息等功能。 友情提醒&#x…...
分布式系统的一致性与共识算法(一)
前言 etcd是线性一致性读,而zk却是顺序一致性读,再加上各种共识、强弱一致的名词,看到欸度时候总会混淆,这里会给出一些例子来帮助理解。 什么是一致性? 在谈到一致性这个词时,你会想到CAP理论的consist…...
创建一个Spring Boot项目
文章目录 一、如何创建一个Spring Boot项目1.1 项目创建:专业版 or 社区版 or 网站创建1.2 数据配置1.3 项目启动1.4 代码编写 二、Spring Boot 项目文件介绍三、Web服务器四、根据HTTP状态码解决bug4.1 4044.2 500 五、Spring VS Spring Boot VS Spring Web MVC5.1…...
ansible -playbook运维工具、语法、数据结构、命令用法、触发器、角色
目录 配置文件 基本语法规则: YAML支持的数据结构 playbook核心元素 ansible-playbook用法: 触发器 特点: 角色: 习题: 配置文件 playbook配置文件使用yaml语法,YAML 是一门标记性语言,专门用来写配…...
web前端之sass中的颜色函数、active按钮激活、hover鼠标悬浮、disabled禁用、scss循环、css
MENU 效果图htmlsassscss编译后的css页面css 效果图 注意查看蓝色按钮。 html <div class"box"><button class"btn type_1">按钮</button><button class"btn type_2">按钮</button><button class"btn ty…...
交通地理信息系统实习教程(二)
这篇文章服务于GIS背景用户以及有志于GIS的朋友 操作源数据位置:【免费】交通地理信息系统实习二源数据资源-CSDN文库 软件安装包位置:【免费】TransCad-交通地理信息系统软件资源-CSDN文库 一、最短路径分析 1.1软件启动说明 这里需要给出一个必要的…...
Shell脚本——批量清理Kubernetes集群中Evicted状态的pod
测试环境有一台宿主机出现了异常,大量的异常日志导致宿主机的磁盘使用率超过了85%,触发了上面的pod驱离策略,该宿主机上的的pod处于Evicted状态。在清理了磁盘之后,得手动处理掉这些Evicted状态的pod。 #!/bin/bash# 获取当前状态…...
用FPGA的DDS IP核做个信号发生器:从Vivado配置到ILA抓波形实战
基于FPGA的DDS信号发生器实战:从IP核配置到硬件调试全解析 在数字信号处理领域,直接数字频率合成(DDS)技术因其频率分辨率高、切换速度快和相位连续可调等优势,已成为现代电子系统中不可或缺的核心技术。本文将带领读者完成一个完整的FPGA-ba…...
CacheTool配置指南:如何通过YAML文件简化操作流程
CacheTool配置指南:如何通过YAML文件简化操作流程 【免费下载链接】cachetool CLI App and library to manage apc & opcache. 项目地址: https://gitcode.com/gh_mirrors/ca/cachetool CacheTool是一款强大的PHP缓存管理工具,能够通过命令行…...
Logisim新手避坑指南:手把手搞定头歌平台偶校验解码电路(附完整data.circ文件配置)
Logisim新手避坑指南:手把手搞定头歌平台偶校验解码电路 第一次打开Logisim时,那个简陋的界面和密密麻麻的逻辑门可能会让你望而生畏。更不用说还要在头歌平台上完成偶校验解码电路的评测——光是看到"找不到GB2312ROM.circ"的报错就足以让大多…...
MCP (Model Context Protocol) 实战指南:从零搭建 AI Agent 工具生态系统
引言 2025年底 Anthropic 推出的 Model Context Protocol (MCP) 正在彻底改变 AI Agent 与外部工具的交互方式。截至 2026年5月,MCP 生态系统已拥有超过 3000 个开源 Server 实现,成为连接 LLM 与现实世界数据的标准协议。 本文将深入讲解 MCP 的核心原…...
某包丨图片+视频去水印去除工具
首先下载软件(工具在末尾),然后运行,自动打开网页如下: 接着打开某包,找到你要去除水印的图片或者视频的链接: 工具下载: 链接:https://pan.quark.cn/s/aec2cdde94ed...
谷歌关键词优化具体要做什么?新网站靠长尾词2周快速被收录
新域名的权重评分在初期处于1分的初始档位。全新页面发布后,通常需要经历90天到180天的考察停留。在新站上线的头30天里,搜索引擎分配给网站的每日抓取频率处于极低水平,统计显示每日爬虫访问次数往往少于5次。频繁的等待造成了大量新发布的页…...
2026年最容易上手的5个AI副业
前言: 2026年,AI工具已经彻底改变了副业的门槛。过去需要3-5年积累的技能,借助AI可能只需3-5周就能开始接单赚钱。 这篇文章精选了5个最容易上手、最快出收益的AI副业方向,每个方向都附上了具体操作路径。 一、为什么现在是做AI副业的最好时机? 三个关键信号: 需求爆发…...
Microblaze软核处理器在SRAM型FPGA中的抗单粒子效应高可靠加固方案
1. 项目概述:为什么要在太空里“加固”一个软核处理器?在工业自动化、医疗影像或者汽车电子领域,你或许听说过Xilinx FPGA里的Microblaze软核处理器。它就像一个可以随心所欲“捏”出来的32位或64位CPU大脑,开发者能根据项目需求&…...
ChatGPT对技术从业者的影响:机遇与挑战
在人工智能技术飞速发展的当下,ChatGPT这类大语言模型的横空出世,无疑在科技领域投下了一颗重磅炸弹。对于软件测试从业者而言,这既是一场前所未有的机遇,也是一次严峻的挑战。它不仅重塑了测试工作的模式与效率,更对从…...
IC697PWR710H电源模块
IC697PWR710H 是GE Fanuc Series 90-70 PLC系统使用的一款高可靠性电源模块,为机架内所有模块提供稳定的直流供电,属于710系列的改进或衍生版本。中间:15条产品特点IC697PWR710H 输入支持交流120/240V或直流125V,适应不同现场供电…...
