一起进阶一起拿高工资!Java开发进阶-log4j2日志脱敏原理分析

本文首发于公众号【看点代码再上班】 , 欢迎关注 , 第一时间获取最新文章 。
大家好 , 我是tin , 这是我的第5篇原创文章
本文讲述在考虑对业务系统代码入侵最小的情况下实现日志脱敏的方案原理 。文章很长 , 包括了日志脱敏起由、编码实现、.xml文件加载原理、的插件机制等 , 最后还抖出注解编译处理器 , 实现编译期动态生成代码!有点像捡到宝 , 毕竟以前没关注过注解编译处理器 , 先上一个目录:
一、为什么做日志脱敏
日志打印非常常见且重要 , 这毋庸置疑 , 但有这样一种情况:我们打印的日志包含了用户的隐私信息 , 比如做登录支付的打印用户账号和密码 , 做金融的打印用户的卡号等 , 这些日志先不说放在磁盘上管理不当可能造成用户隐私泄露 , 再者就算是合规检查 , 它也是不过关的 , 必须要做处理整治 。
我们打日志是怎么打的?先上一个图(日志中打印我的用户名和账号) , 看看我们自己就是这么用的:
没做特殊处理 , 不出意外 , 日志输出是这样的:
卡号打印出来了 , 随后这行日志就安详地躺在我们服务器磁盘上 。
二、日志脱敏编码实现
如何借助日志框架实现对账号打码脱敏 , 而不入侵业务代码?废话不多说 , 先看看我已实现的效果:
本文基于slf4j+实现 , 我们代码日志输出处没有任何改动 , 打打印出来的日志对卡号做了打码脱敏 。
本文实现日志打码脱敏的方案涉及开发的地方有两个:
一是实现的接口 , 重写;
二是修改.xml文件 。
看看我写的实现类:
.xml修改 , 下面是配置和配置:
这个文件也非常详细地把.xml配置解释了一遍 , 不是很清楚log4j配置的可留图保存啦 。
为了方便复制 , 把.xml配置的源码粘贴一份出来:
【一起进阶一起拿高工资!Java开发进阶-log4j2日志脱敏原理分析】
三、源码探索日志脱敏原理
为何上文这么做就能实现日志打码脱敏?是有什么变法么?实现的原理是什么?背着一大连串疑问 , 现在我们从slf4j和原理说起 , 来了 , 搬好凳子了 。
1、什么是slf4j?
slf4j全称for Java 。是一个日志接口框架 , 配合日志输出系统实现日志输出 。slf4j并不是真正输出日志的系统 , 只是定义了一套日志规范 。类似这样的日志门面还有- 。
final= .(.class);
以上的就是slf4j的类 。
2、又是什么?
才是一个真正的日志系统 , 它才是我们项目中打印日志的代码库实现 。除了 , 我们常见的日志库还有log4j、、jdk- 。