log4j2配置日志中敏感字符掩码输出

背景

最近项目中需要对日志输出的敏感信息做掩码处理, 由于需要处理的地方太多而且比较麻烦, 所以就研究了下, 看看log4j2有没有提供某种可以统一处理方式

方案1(正则匹配)

看了官方文档后发现有个简单快捷的方式就是使用正则可以直接匹配替换相关信息

我们的日志输出使用的<PatternLayout>

Log4j – Log4j 2 Layouts

按照文档中写的将相应处理的正则写到具体需要替换的地方就可以了, 一般都是%msg

我这边写的就是处理(手机号/身份证号/银行卡号), 网上看到微信处理9~29位数字都算银行卡号

因为我们日志中一般输出这些信息都是json形式, 所以这边就简单粗暴, 直接匹配双引号括住的串, 直接一个正则匹配所有, 默认只要是数字达到相应长度就处理

<Property name="regex">%replace{%msg}{"([1-9][0-9]{2})([0-9]{6})([0-9]+|[0-9]+X)"}{"$1***$3"}</Property>
<Property name="pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%22t] %-5level %c{1.} %M-${regex}%xEx%n</Property>

下面就是具体的日志输出

另外一种方式就是写了多个正则匹配, 不过比较麻烦, 而且没法按照上面那样输出$1$3, 所有就没采用, 不过也贴出来, 供大家参考

([1][3-9][0-9]{9})|([1-9][0-9]{16}([0-9]|X))|([1-9][0-9]{9,29})

方案2(重写PatternLayout)

上面的方案1处理太过简单, 而且只能使用一个正则, 没法用于相对比较复杂的情况, 这时候可以重写PatternLayout。

不过重写Layout相对麻烦点, 对于当下我的需求来说没必要, 所以也仅仅是了解了下, 大概思想就是按照PatternLayout重写一个自己的Layout, 然后按照自己的需求处理msg, 有兴趣的同学可以自行研究



log4j2 日志脱敏/特殊处理_Saytime-优快云博客_log4j2日志脱敏

之前的方案1只支持一种正则, 由于我们目前需求要处理多个信息, 所以之前的方式不满足了, 又翻了翻, 按照上面这个文章里的方案, 应该都可以满足

我个人在实现过程中感觉用起来比较麻烦, 最后决定重写MessagePatternConverter

直接复制MessagePatternConverter代码, 改为个类名就可以, 自定义ConverterKeys以及Plugin中的name, 然后在format(LogEvent event, StringBuilder toAppendTo)方法中处理msg就可以, 相对比较简单, 基本上不需要自己写啥, 自己实现多规则正则匹配替换就行

 仅供参考, 我随便贴的

上述步骤完成后, 将log4j2.xml文件中的pattern规则中的msg改为自己定义的ConverterKeys名称就行

举例: 以前%msg.....  ===>  %cusmsg...

参考文档

log4j2 日志脱敏/特殊处理_Saytime-优快云博客_log4j2日志脱敏

https://logging.apache.org/log4j/2.0/manual/plugins.html

java - Log4j2 custom layout - Stack Overflow

log4j2-customPatternLayout: 自动以log4j2 patternLayout, 用于支持多个正则表达式过滤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值