使用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
    评论
使用 Log4j2 记录日志也很简单,步骤如下: 1. 在 pom.xml 文件中添加 log4j2 依赖: ``` <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>2.13.3</version> </dependency> ``` 2. 在 src/main/resources 目录下创建 log4j2.xml 文件,配置日志输出格式和输出位置等信息。以下是一个简单的示例配置文件: ``` <?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{yyyy-MM-dd}-%i.log.gz"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10MB" /> </Policies> <DefaultRolloverStrategy max="20" /> </RollingFile> </Appenders> <Loggers> <Root level="INFO"> <AppenderRef ref="Console" /> <AppenderRef ref="RollingFile" /> </Root> <Logger name="com.example" level="DEBUG" additivity="false"> <AppenderRef ref="RollingFile" /> </Logger> </Loggers> </Configuration> ``` 这个配置文件中定义了两个 appender,一个是 Console,表示将日志输出到控制台;另一个是 RollingFile,表示将日志输出到文件中。其中,filePattern 配置了日志文件的命名格式,Policies 中配置了两个触发策略,一个基于时间,一个基于文件大小。 3. 在代码中使用 LoggerFactory 获取 Logger 对象,然后即可进行日志记录。例如: ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DemoController { private static final Logger logger = LoggerFactory.getLogger(DemoController.class); public void doSomething() { logger.debug("Debug log message"); logger.info("Info log message"); logger.warn("Warn log message"); logger.error("Error log message"); } } ``` 运行程序后,日志将会输出到控制台和指定的日志文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值