当前位置:首页 >探索 >基于 log4j2 插件实现统一日志脱敏,性能远超正则替换 但是插件超正实际项目中

基于 log4j2 插件实现统一日志脱敏,性能远超正则替换 但是插件超正实际项目中

2024-06-28 21:43:21 [百科] 来源:避面尹邢网

基于 log4j2 插件实现统一日志脱敏,基于性能远超正则替换

作者:老马啸西风 开发 前端 我们可以基于 log4j2 RewritePolicy 统一使用脱敏策略。插件超正本项目自 V1.2.0 添加对应支持,实现后续将提升对应的统日可拓展性。

前言

金融用户敏感数据如何优雅地实现脱敏?

基于 log4j2 插件实现统一日志脱敏,性能远超正则替换 但是插件超正实际项目中

日志脱敏之后,志脱则替无法根据信息快速定位怎么办?

基于 log4j2 插件实现统一日志脱敏,性能远超正则替换 但是插件超正实际项目中

经过了这两篇文章之后,敏性我们对日志脱敏应该有了一定的基于理解。

基于 log4j2 插件实现统一日志脱敏,性能远超正则替换 但是插件超正实际项目中

但是插件超正实际项目中,我们遇到的实现情况往往更加复杂:

  • 项目的 java bean 定义不规范,大量接口使用 map。统日
  • 历史项目众多,志脱则替改造成本巨大。敏性

种种原因,基于导致使用注解的插件超正方式耗费大量的时间。但是实现一般给我们改造的时间是有限的。

那么,有没有一种方法可以统一对敏感信息进行脱敏处理呢?

答案是有的,我们可以基于 log4j2 实现自己的脱敏策略,统一实现日志的脱敏。

log4j2 Rewrite

我们可以基于 log4j2 RewritePolicy 统一使用脱敏策略。

本项目自 V1.2.0 添加对应支持,后续将提升对应的可拓展性。

说明:如果使用 slf4j 接口,实现为 log4j2 时也是支持的。

使用入门

maven 引入

引入核心脱敏包。

<dependency>    <groupId>com.github.houbb</groupId>    <artifactId>sensitive-log4j2</artifactId>    <version>1.2.1</version></dependency>

其他的一般项目中也有,如 log4j2 包:

<dependency>    <groupId>org.apache.logging.log4j</groupId>    <artifactId>log4j-api</artifactId>    <version>${ log4j2.version}</version></dependency><dependency>    <groupId>org.apache.logging.log4j</groupId>    <artifactId>log4j-core</artifactId>    <version>${ log4j2.version}</version></dependency>

log4j2.xml 配置

例子如下:

<?xml version="1.0" encoding="UTF-8"?><Configuration status="WARN" packages = "com.github.houbb.sensitive.log4j2.rewrite">    <Appenders>        <Console name="Console" target="SYSTEM_OUT">        </Console>        <Rewrite name="rewrite">            <AppenderRef ref="Console"/>            <SensitiveRewritePolicy/>        </Rewrite>    </Appenders>    <Loggers>        <Root level="DEBUG">            <AppenderRef ref="rewrite" />        </Root>    </Loggers></Configuration>

几个步骤:

  • 指定 package 为 packages = "com.github.houbb.sensitive.log4j2.rewrite"。
  • 按照 log4j2 Rewrite 规范,指定重写策略为 SensitiveRewritePolicy。
  • 输出时,直接指定为对应的重写之后的结果 <AppenderRef ref="rewrite" />。

测试

正常的日志打印:

private static final String TEST_LOG = "mobile:13088887777; bankCard:6217004470007335024, email:mahuateng@qq.com, amount:123.00, " +        "IdNo:340110199801016666, name1:李明, name2:李晓明, name3:李泽明天, name4:山东小栗旬" +        ", birthday:20220517, GPS:120.882222, IPV4:127.0.0.1, address:中国上海市徐汇区888号;";logger.info(TEST_LOG);

自动脱敏效果如下:

mobile:130****7777|9FC4D36D63D2B6DC5AE1297544FBC5A2; bankCard:6217

(责任编辑:知识)

    推荐文章
    热点阅读