# 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類
- 注冊技術組件
- 打包技術組件
- 前端控件