# Logback和slf4j的日志脱敏组件
## 前言
对于日志脱敏的方式有很多,常见的有①使用conversionRule标签,继承MessageConverter②书写一个脱敏工具类,在打印日志的时候对特定特字段进行脱敏返回。
两种方式各有优缺点:第一种方式需要修改代码,不符合开闭原则。第二种方式,需要在日志方法的参数进行脱敏,对原生日志有入侵行为。
## 本组件说明
本组件基于非入侵及脱敏字段扩展考虑,采用yml配置文件来扩展脱敏字段及不同的脱敏规则。其核心思想就是:读取配置文件里的脱敏字段和其脱敏规则。在日志替换的时候将字段进行脱敏。
本组件基于logback+slf4j,暂不支持log4j,如需解决log4j的日志,可以参照本组件的思想去完成。
本组件支持的脱敏数据类型:八大基本类型及其包装类型、String类型、Map、List、JSON字符串、项目中的POJO对象。
注:Map、JSON、List、POJO、List对象的脱敏处理需要配置其对应的字段名即可,无法处理List类型。
在使用本组件的时候,一定要注重日志打印规范。
具体使用方式见博客(重要!重要!重要!):https://blog.csdn.net/qq\_40885085/article/details/113385261
## 匹配规则:
key + 分割符 + value,如phone:{},即phone:13436781234。如email={},即email=123456789@qq.com
本组件默认只支持冒号和等号分割,如需其他方式可以修改正则匹配方式(本组件的正则匹配是匹配的key:value和key=value)
如:
```java
log.info("your email:{}, your phone:{}", "123456789@qq.com","15310763497");
log.info("your email={}, your cellphone={}", "123456789@qq.com","15310763497");
```
## 使用方式
1、在logback-spring.xml同级新增logback-desensitize.yml配置
logback-desensitize.yml配置示例
```
# 日志脱敏
log-desensitize:
# 是否忽略大小写匹配,默认为true
ignore: true
# 是否开启脱敏,默认为false
open: true
# pattern下的key/value为固定脱敏规则
pattern:
# 邮箱 - @前第4-7位脱敏
email: "@>(4,7)"
# qq邮箱 - @后1-3位脱敏
qqemail: "@<(1,3)"
# 姓名 - 姓脱敏,如*杰伦
name: 1,1
# 密码 - 所有需要完全脱敏的都可以使用内置的password
password: password
patterns:
# 身份证号,key后面的字段都可以匹配以下规则(用逗号分隔)
- key: identity,idcard
# 定义规则的标识
custom:
# defaultRegex表示使用组件内置的规则:identity表示身份证号 - 内置的18/15位
- defaultRegex: identity
position: 9,13
# 内置的other表示如果其他规则都无法匹配到,则按该规则处理
- defaultRegex: other
position: 9,10
# 电话号码,key后面的字段都可以匹配以下规则(用逗号分隔)
- key: phone,cellphone,mobile
custom:
# 手机号 - 内置的11位手机匹配规则
- defaultRegex: phone
position: 4,7
# 自定义正则匹配表达式:座机号(带区号,号码七位|八位)
- customRegex: "^0[0-9]{2,3}-[0-9]{7,8}"
# -后面的1-4位脱敏
position: "-<(1,4)"
# 自定义正则匹配表达式:座机号(不带区号)
- customRegex: "^[0-9]{7,8}"
position: 3,5
# 内置的other表示如果其他规则都无法匹配到,则按该规则处理
- defaultRegex: other
position: 1,3
# 这种方式不太推荐 - 一旦匹配不上,就不会脱敏
- key: localMobile
custom:
customRegex: "^0[0-9]{2,3}-[0-9]{7,8}"
position: 1,3
```
> 自定义脱敏支持的方式
> 1、key:value的方式
> phone:4,7,表示phone属性的4-7位进行脱敏
> 原始数据:13610357861
> 脱敏后:136****7861
>
> 2、以符号作为起始、结束节点作为脱敏标志
> emai:"@>(4,7)",@为脱敏标志,>表示其为结束节点,<表示其为开始节点。即@>表示对@之前的进行脱敏,@<表示对@之后的进行脱敏。这个示例就是@前的数据的第4-7位进行脱敏。注意:这种规则里的双引号、括号不能省略,其次:和=不能作为标志符号,因为和匹配规则有冲突
> 原始数据:123456789@qq.com
> "@>(4,7)"脱敏后:123****89@qq.com
> "@<(1,3)"脱敏后:123456789@***com
>
2、在logback.xml中引入对应的Appender,使用组件里的类代替原来的
#### ①ConsoleAppender - 控制台脱敏
原配置类:
```java
ch.qos.logback.core.ConsoleAppender
```
替换类:
```java
pers.liuchengyin.logbackadvice.LcyConsoleAppender
```
#### ②RollingFileAppender - 滚动文件
原配置类:
```java
ch.qos.logback.core.rolling.RollingFileAppender
```
替换类:
```java
pers.liuchengyin.logbackadvice.LcyRollingFileAppender
```
#### ③FileAppender - 文件
原配置类:
```java
ch.qos.logback.core.FileAppender
```
替换类:
```java
pers.liuchengyin.logbackadvice.LcyFileAppender
```
- 服务组件
- sca-register注册配置中心
- sca-gateway服务网关
- sca-auth认证授权服务
- sca-upms权限管理服务
- sca-quartz定时任务服务
- sca-monitor系统监控服务
- sca-commservie通讯前置服务
- sca-sentinel限流熔断服务
- sca-codegen代码生成服务
- sca-message消息发送服务
- sca-rule规则引擎服务
- sca-workflow工作流引擎服务
- sca-report报表服务
- ELK日志服务
- SkyWalking链路跟踪
- Prometheus监控
- 技术组件
- sca-common-swagger(聚合文档)
- sca-common-log(系统日志)
- sca-common-sentinel(熔断限流)
- sca-common-feign(Feign接口调用)
- sca-common-sequence(分布式发号器)
- sca-common-gray(灰度发布)
- sca-common-security(授权认证)
- sca-common-datasource(动态数据源)
- sca-common-data(数据库及缓存)
- sca-common-oss(文件服务)
- sca-common-xss(XSS安全过滤)
- sca-common-test(微服务单元测试)
- sca-common-test-alone(单体应用单元测试)
- sca-common-memdb(内存数据库)
- 日志脱敏
- Pdf文档转换及预览
- IDE组件
- IDE技术组件介绍
- FastJson技术组件类
- 对象转string技术组件
- JDBC操作技术组件类
- SQL查询(完整SQL)技术组件
- 关闭连接技术组件
- 执行预编译SQL(update)技术组件
- 数据分页查询技术组件
- 数据删除技术组件
- 数据批量插入技术组件
- 数据插入技术组件
- 数据更新技术组件
- 标准数据查询方法(单表)技术组件
- 获取序列号技术组件
- 行数统计技术组件
- 调用存储过程技术组件
- 预编译SQL查询(参数)
- 集合操作技术组件类
- Set和List类型互转技术组件
- 交集技术组件
- 增加元素(批量)技术组件
- 增加元素技术组件
- 差集技术组件
- 并集技术组件
- 替换元素技术组件
- 集合删除(下标)技术组件
- 集合删除(元素)技术组件
- 集合清空技术组件
- 金额处理技术组件类
- 乘技术组件
- 元转换为分技术组件
- 减技术组件
- 删除千分符技术组件
- 加技术组件
- 取金额绝对值技术组件
- 字符串转BigDecimal技术组件
- 是否为0技术组件
- 金额格式化技术组件
- 金额比较技术组件
- 金额舍入技术组件
- 金额转大写技术组件
- 除技术组件
- Redishash操作的组件集合
- 删除字段技术组件
- 字段是否存在技术组件
- 设置字段值(覆盖)技术组件
- 获取字段值技术组件
- 设置字段值(不覆盖)技术组件
- 批量设置字段值技术组件
- 批量获取字段值技术组件
- 获取字段数量技术组件
- 获取字段名称列表技术组件
- 获取字段值列表技术组件
- 获取字段和值列表技术组件
- Redis_Key操作技术组件类
- 获得redisTemplate技术组件
- 重命名key技术组件
- 清空Redis技术组件
- key是否存在技术组件
- 取消过期时间技术组件
- 获取数据结构类型技术组件
- 设置过期时间(毫秒)技术组件
- 设置固定过期时间技术组件
- 剩余存活时间(秒)技术组件
- 删除(批量)技术组件
- 删除(单个)技术组件
- 移动key到指定db技术组件
- 集合排序(正序)技术组件
- Redis_List操作组件操作类
- 插入(尾部)技术组件
- 插入(头部)技术组件
- 列表长度技术组件
- 截取区间列表元素技术组件
- 保留列表元素技术组件
- 获取列表元素(按下标)技术组件
- 设置列表元素(按下标)技术组件
- 删除元素(按值出现次数)技术组件
- 移除并返回元素(头部)技术组件
- 移除并返回元素(尾部)技术组件
- 已有列表插入(尾部)技术组件
- 已有列表插入(头部)技术组件
- 已有列表插入(按位置)技术组件
- 配置中心技术组件类
- 获取Nacos配置内容技术组件
- 通讯前置技术组件类
- 异步应答技术组件
- 组报文(前置)技术组件
- 解报文(前置)技术组件
- 调用第三方交易技术组件
- 调试输出技术组件类
- 输出日志(debug)技术组件
- 输出日志(warn)技术组件
- 输出日志(error)技术组件
- 输出日志(info)技术组件
- 编解码处理技术组件类
- BCD编码技术组件
- BCD解码技术组件
- Base64编码技术组件
- Base64解码技术组件
- 服务调用技术组件类
- 交易调用(分布式)技术组件
- 交易调用(第三方系统)技术组件
- 服务调用(rest服务名)技术组件
- 服务调用(ip-port)技术组件
- 日期时间技术组件类
- 当前时间(date)技术组件
- 当前时间(字符串)技术组件
- 当前时间(毫秒)技术组件
- 日期格式检查技术组件
- 日期比较技术组件
- 日期相加技术组件
- 格式化日期技术组件
- 获取日历字段技术组件
- 计算时间差(Date)技术组件
- 计算时间差(字符串)技术组件
- 转换日期对象技术组件
- 文件操作技术组件类
- MD5计算签名技术组件
- ZIP文件压缩技术组件
- ZIP文件解压缩技术组件
- 写文件内容技术组件
- 创建文件技术组件
- 创建文件目录技术组件
- 文件删除技术组件
- 文件合并技术组件
- 文件大小技术组件
- 文件存在检查技术组件
- 文件拷贝技术组件
- 文件查找技术组件
- 读文件内容技术组件
- 读文件行技术组件
- 数据库操作技术组件类
- 切换数据源技术组件
- 删除(BatchIds)技术组件
- 删除(Entity)技术组件
- 删除(ID)技术组件
- 删除(columnMap)技术组件
- 回滚上一事务技术组件
- 回滚全部事务技术组件
- 开启事务技术组件
- 执行指定方法技术组件
- 提交上一事务技术组件
- 提交全部事务技术组件
- 新增数据技术组件
- 更新(Entity)技术组件
- 更新(ID)技术组件
- 查询(BatchIds)技术组件
- 查询(ID)技术组件
- 查询(Objects)技术组件
- 查询(columnMap)技术组件
- 查询(list)技术组件
- 查询(map)技术组件
- 查询(分页)技术组件
- 查询(单条)技术组件
- 查询(总条数)技术组件
- 清理数据源技术组件
- 数据字典技术组件类
- 平台字典技术组件
- 应用字典技术组件
- 银行字典技术组件
- 平台内置组件技术组件类
- switch选择器技术组件
- 从异步组件中获取数据技术组件
- 初始化线程池技术组件
- 判断异步组件是否已完成技术组件
- 当期线程休眠技术组件
- 获取异常信息到容器技术组件
- 获取环境变量技术组件
- 获取系统变量技术组件
- 表达式判断技术组件
- 设置全局错误技术组件
- 随机正整数技术组件
- 对象操作技术组件类
- map转对象技术组件
- 创建list技术组件
- 创建实体类对象(空对象)技术组件
- 创建实体对象(赋值)技术组件
- 反序列化对象技术组件
- 对象属性赋值技术组件
- 对象序列化成数组技术组件
- 获取对象类型名称技术组件
- 获得对象字段值技术组件
- 获得对象属性及值列表技术组件
- Redis_Set操作技术组件类
- 添加元素技术组件
- 获取所有元素技术组件
- 移除指定元素技术组件
- 随机移除并返回(一个)技术组件
- 随机移除并返回(多个)技术组件
- 集合元素数量技术组件
- 是否包含指定元素技术组件
- 随机返回元素(一个)技术组件
- 随机返回元素(多个)技术组件
- Redis_String操作技术组件类
- 设置值(覆盖)技术组件
- 获取值技术组件
- 获取值(批量)技术组件
- 字符串追加值技术组件
- 设置值(不覆盖)技术组件
- 设置值(带过期时间:秒)技术组件
- 覆盖部分值技术组件
- 截取区间字符串技术组件
- 赋值并返回旧值技术组件
- 值长度技术组件
- Redis_ZSet操作技术组件类
- ZSet添加元素技术组件
- 获取区间集合元素(正序按下标)技术组件
- 获取区间集合元素(倒序按下标)技术组件
- 移除集合元素技术组件
- 增加元素的排序值技术组件
- 获取元素排名(正序)技术组件
- 获取元素排名(倒序)技术组件
- ZSet集合元素数量技术组件
- 获取元素排序值技术组件
- 统计区间元素数量技术组件
- 移除区间元素(按排名)技术组件
- 移除区间元素(按排序值)技术组件
- 容器操作技术组件类
- 取容器深度技术组件
- 容器删除(按value)技术组件
- 容器变量删除(保留keys)技术组件
- 容器变量删除(删除单个key)技术组件
- 容器变量删除(删除多个key)技术组件
- 容器变量赋值技术组件
- 容器变量赋值(批量)技术组件
- 获取容器变量值技术组件
- 容器变量拷贝技术组件
- 容器变量获取(批量)技术组件
- 容器清空技术组件
- 容器多层次赋值技术组件
- Redis计算操作组件类
- 减(整数)技术组件
- 减1技术组件
- 加(整数)技术组件
- 加1技术组件
- 加(浮点数)技术组件
- hash字段加(整数)技术组件
- UUID和ID技术组件类
- 生成UUID技术组件
- 生成ID技术组件
- 批量生成ID技术组件
- 公共方法源码
- 安全组件技术组件类
- 3DES加密技术组件
- 3DES解密技术组件
- DES加密技术组件
- DES解密技术组件
- MD5十进制字符串技术组件
- MD5计算签名技术组件
- 获取CRC16码技术组件
- excel技术组件类
- 获取工作簿技术组件
- 获取工作簿(文件名)技术组件
- 工作簿写文件技术组件
- sheet数技术组件
- sheet行数技术组件
- 工作簿数据行数技术组件
- sheet列表技术组件
- 获取sheet技术组件
- 创建工作簿(xlsx)技术组件
- 创建工作簿(指定格式)技术组件
- 工作簿64编码技术组件
- 文件是否超出限制技术组件
- 文件是否超出限制(文件名)技术组件
- 输出文件地址技术组件
- 新建日期文件夹技术组件
- 截取文件路径技术组件
- 工作簿清理技术组件
- 打开Excel文件技术组件
- 取Excel列数据技术组件
- 取Excel单元格技术组件
- 取Excel行列数技术组件
- 取Excel行数据技术组件
- 公共方法
- 字符串技术组件类
- 字符串切割技术组件
- 字符串去空格技术组件
- 字符串是否包含技术组件
- 字符串截取技术组件
- 统计字符数技术组件
- 统计字节数技术组件
- 以子字符串开始技术组件
- 以子字符串结尾技术组件
- 字符串转大写技术组件
- 字符串转小写技术组件
- 是否包含全角字符技术组件
- 字符串拼接技术组件
- 字符串连接技术组件
- 字符串替换技术组件
- 字符串正则表达式替换技术组件
- 字符串非空技术组件
- 字符串补齐技术组件
- 正则表达式匹配技术组件
- 字符串编码转换技术组件
- 字符串查找定位技术组件
- 变量操作技术组件类
- 字段检查(长度范围)技术组件
- 正则表达式检查技术组件
- 数字检查(大小区间)技术组件
- 变量字段检查(类型、长度)技术组件
- 身份证号校验技术组件
- 身份照15位转18位技术组件
- 上传下载技术组件类
- FTP文件上传技术组件
- FTP文件下载技术组件
- SFTP文件上传技术组件
- SFTP文件下载技术组件
- 自定义组件开发
- IDE技术组件包,技术组件类创建
- 新建、编辑IDE技术组件
- 过时组件介绍
- 技术组件API
- 新建普通java类
- 注册技术组件
- 打包技术组件
- 前端控件