使用log4j2实现日志数据脱敏

我们在JAVA项目中,通常会使用日志组件打印日志。但是,在日志中不能打印出用户的敏感信息。比如账户号码、群组号码、密码、IP地址等。而在当前的日志中,存在了大量这样的信息,用于定位问题。我们使用的是log4j2组件(log4j 2.7)。如果需要去除这些有敏感信息的打印项,存在几个问题:一、浪费人力,需要逐一去排查;二、去除时,去不干净或者在后续的工作中,又无意识的添加打印了一些敏感信息,不好根除;三、为了去除这些敏感信息,同时也去除了另一部分了信息,而这些信息都是有利于定位问题的信息,去除后使我们分析定位问题更加的困难。

为此我一直在思索,有没有更好的办法?经过几个小时的思索,终于想到了一个解决思路,可不可以在日志的底层去检测这些敏感信息,并对这些敏感信息进行脱敏处理?在网上查阅各种资料,根本没有找到对应的资料。也更加坚定的要解决这个问题的决心,并且要在完成的时候,写一篇博客,让更多有同样需求的人用到。一个偶然的时机,灵感出现了。因为我在项目中打印模式使用的是PatternLayout,我想可不可以试试重写源码中的PatternLayout来实现自定义的Layout。功夫不负有心人,还真的成功了。看效果:



这里简单实现了脱敏号码的功能,对IP的脱敏也可以使用这种方式。其原理是通过log4j内部代码获取到原本最终需要打印的字符串信息,我们通过customize方法对这个字符串信息做我们需要的检测和处理,然后再返回给log4j。


所以此处的作用不光是可以实现数据的脱敏,也可以根据自己的业务需要,对日志进行自行定制,再输出。

使用方式:

1.在customize方法中实现自己的日志定义策略;

2.在log4j2.xml中使用CustomPatternLayout定义Layout

https://img-blog.csdn.net/20170508233724786?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG9uZ3Bpbmc4ODg3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center


链接:http://download.csdn.net/detail/dongping8887/9836910

内容太多,不方便在此贴源码,已附上源码链接,大家可自行分析,还有不明白的可以通过微信联系我:dongping8887。有更好的方式我们共同讨论、共同学习。








  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值